Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > не работает postEvent для кнопки


Автор: access 30.6.2009, 12:23
Доброго дня. Есть код:
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class PostEvent implements ActionListener {
    private static JButton b1 = new JButton("1");
    private static JButton b2 = new JButton("2");
    private ActionEvent ae;

    public static void main(String[] args) {javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new PostEvent();
        }
        });
    }


    public PostEvent() {
        JFrame frame = new JFrame("");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        b1.setBounds(0,0,50,25);
        b2.setBounds(0,30,50,25);
        frame.getContentPane().add(b1);
        frame.getContentPane().add(b2);
        b1.addActionListener(this);
        b2.addActionListener(this);
        ae = new ActionEvent((Object)b1, ActionEvent.ACTION_PERFORMED, "");
        frame.setPreferredSize(new Dimension(150, 100));
        frame.pack();
        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==b1)
        {
            System.out.println("from first");
        }
        if (e.getSource()==b2)
        {
            System.out.println("from second");
            java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ae);
        }
    }
}

Подскажите, почему не срабатываетвызов кнопки b1, хотя если написать
Код

((JButton)ae.getSource()).doClick();
, всё работает...

Автор: dorogoyIV 30.6.2009, 15:08
 smile 
во первых срабатывает

во вторых можешь написать так:
Код

//  ae = new ActionEvent((Object)b1, ActionEvent.ACTION_PERFORMED, "");

и ничего не изменится, т.е. твой объект не задействован

в третьих
Код

  if (e.getSource().equals(b1))


Автор: access 30.6.2009, 15:35
Цитата

во первых срабатывает

и где это видно? При "срабатывает" я ожидал увидеть (при нажатии на 2-ю кнопку) это:

from second
from first

Цитата

во вторых можешь написать так:
//  ae = new ActionEvent((Object)b1, ActionEvent.ACTION_PERFORMED, "");
и ничего не изменится, т.е. твой объект не задействован

Попробовал, прикольно. Валит нуллпоинтер эксепшн.
Цитата

в третьих
if (e.getSource().equals(b1))

Хм, даже и не знаю, куда это воткнуть. У меня есть событие, которое я хочу потом программно вызвать. Вы не могли бы развернуть свой ответ, а то после обеда туго соображается (((...

Автор: dorogoyIV 30.6.2009, 15:50
значит не весь рабочий код приведен.
потому, что, я просто тупо скопировал, и все работало!

а объекты сравниваются через equals , а не через "=="

Автор: access 30.6.2009, 16:12
Любопытно, теперь уже я к себе тупо скопировал, и ничего не работает (... (код приведен весь) Проверил на двух машинах - не работает (везде Java 1.5, идея и эклипс). У вас какая версия ждк?
Кому не трудно, проверьте, плиз, код на своей машине и поделитесь результатом.
При нажатии на кнопку "2" должно выдавать в консоль

from second
from first

Автор: access 1.7.2009, 09:07
Вот я и дома код проверил, там Java 1.6, и тоже не работает. Ума не приложу, dorogoyIV , как у вас оно работает. Может у вас import-часть другая.
Такой способ вызова события встречал в инете не один раз, и пример вроде как рабочий. Однако, если за примером шло обсуждение, то из разряда "почему у меня не работает". Кто-нибудь знает как сделать такой вызов? (это ((JButton)ae.getSource()).doClick() не предлагать)

PS и где все, повымирали в отпуск, что ли?

Автор: dorogoyIV 1.7.2009, 13:26
действительно, скомпилил и запустил под другой версией, тоже не работает  smile 

Автор: access 1.7.2009, 16:03
а при каких условиях вчера работало?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)