Работя върху прост 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 и използвайте само ActionListener с вашия JButton. - person Hovercraft Full Of Eels   schedule 05.09.2012initComponents
от конструктора на JFrame, който добавя всички контроли към JFrame. Как предлагате да го преработя? - person Ali   schedule 05.09.2012