Я работаю над простым проектом Java Swing. Это код основного класса (имя изменено):
public class MainProg
{
private static MainProg program;
//mainWin is a JFrame
private MainWindow mainWin;
//Event handler class which extends MouseAdapter
private TrayManager trayMgr;
public static void main(String[] args)
{
program = new MainProg();
}
public MainProg()
{
mainWin = new MainWindow();
trayMgr = new TrayManager();
mainWin.startBtn.addMouseListener(trayMgr);
mainWin.setVisible(true);
}
}
Как видно, при запуске программа в main()
создает новый экземпляр класса MainProg
, который затем вызывает конструктор. В конструкторе он создает новый экземпляр JFrame mainWin
. Затем он прикрепляет обработчик событий к кнопке на mainWin
.
В классе обработчика событий trayMgr
единственным методом является mouseClicked()
, который ничего не делает, кроме System.out.println('Clicked');
Проблема в том, что когда я запускаю эту программу в Netbeans, сразу отображается JFrame, но мне, похоже, нужно нажать кнопку 2-3 раза, прежде чем сообщение будет напечатано в консоли.
Является ли это чем-то специфичным для Netbeans, или мне нужно что-то изменить, чтобы установить обработчик событий до того, как окно станет видимым?
SwingUtilities.invokeLater(...)
, как это рекомендуется делать в учебниках. Но вряд ли это решит вашу проблему. Я подозреваю, что у вас есть ошибка в коде, который не показан. Но снова избавьтесь от MouseListener и используйте ActionListeners только с вашим JButton. - person Hovercraft Full Of Eels   schedule 05.09.2012initComponents
вызывается из конструктора JFrame, который добавляет все элементы управления в JFrame. Как вы предлагаете мне реорганизовать его? - person Ali   schedule 05.09.2012