2012-04-05 113 views
0

我对actionListener有问题。我创建了自己的简单对话框,它只有两个JButtons - 是和否。当我点击按钮时,actionListener不响应。JButton对actionListener没有反应

这是我的代码:

private void showInfoNewUML() {   
    Dimension buttonsSize = new Dimension(60, 25); 
    Dimension programSize = new Dimension(1200, 700); 
    final JDialog dialogWindow = new JDialog(this, "Erase actual UML diagram" 
      + " with his files", true);   
    JTextArea descDialogWindow = new JTextArea("Do you really erase actual\n" 
      + "UML diagram with his files? "); 
    descDialogWindow.setEditable(false); 
    descDialogWindow.setBackground(new Color(220, 220, 220)); 
    descDialogWindow.setBorder(null); 
    dialogWindow.getContentPane().setBackground(new Color(220, 220, 220)); 
    dialogWindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
    dialogWindow.setModal(true); 
    dialogWindow.setResizable(false); 
    dialogWindow.setLayout(new FlowLayout()); 
    dialogWindow.setSize(310, 100); 
    dialogWindow.setLocation((int) programSize.getWidth()/2, 
      (int) programSize.getHeight()/2); 
    JButton buttonYes = new JButton("Yes"); 
    JButton buttonNo = new JButton("No"); 
    buttonYes.setPreferredSize(buttonsSize); 
    buttonNo.setPreferredSize(buttonsSize); 
    dialogWindow.add(descDialogWindow); 
    dialogWindow.add(buttonYes); 
    dialogWindow.add(buttonNo); 
    dialogWindow.setVisible(true); 

    buttonYes.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      buttonAnoActionPerformed(e); 
     } 

     private void buttonAnoActionPerformed(ActionEvent e) { 
      dialogWindow.setVisible(false); 
     } 
    }); 

    buttonNo.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      buttonNeActionPerformed(e); 
     } 

     private void buttonNeActionPerformed(ActionEvent e) { 
      dialogWindow.setVisible(false); 
     } 
    }); 
} 

我想关闭这个对话框后,我按一下按钮。当我点击十字的右上角按钮时,对话窗口关闭。

谢谢你帮助解决这个问题。

+1

创建一个[SSCCE](http://sscce.org)将帮助我们理解您的问题。 – Jeffrey 2012-04-05 21:38:56

+1

''你真的用他的文件擦除了实际的\ n“ +”UML图吗?“'这似乎更适合['JOptionPane.showConfirmDialog(...)'](http://docs.ora .com/javase/7/docs/api/javax/swing/JOptionPane.html#showConfirmDialog%28java.awt.Component,%20java.lang.Object%29)(以及重载的变体)。 – 2012-04-05 21:44:25

+0

是的,我愿意。不幸的是,我正在做一个捷克语的应用程序,它可以响应showConfirmDialog Yes [in czech“Ano”]和No [in czech“Ne”]进行调整。这是我创建自己的对话框的原因。 – avalagne 2012-04-05 21:48:20

回答

2

尝试在之前添加ActionListeners ,然后调用dialogWindow.setVisible(true);

您的对话框是模态的,因此showInfoNewUML将阻止dialogWindow.setVisible(true);,直到关闭对话框后,注册任何有用的侦听器已为时已晚。

+0

Holy s ** t。谢谢你,先生!我正在其他地方寻找问题。 – avalagne 2012-04-05 21:53:55