我遇到了JComboBox
和JOptionPane
對話框的問題。 情況是這樣的:在JComboBox選擇後打開JOptionPane焦點後
- 它需要從對話框運行,而不是一個框架
- 之前數據設置需要做任何檢查
- 後數據設置的改變需要驗證
我的JComboBox在它的初始數據和我有一個ActionListener
其中,上選擇,顯示一對話框JOptionPane
具有約重新驗證警告。
進行選擇時作出的對話框顯示爲正常,但JComboBox
沒有完成它的循環,並保持JComboBox
打開,直到單擊該對話框,然後你需要做進一步的點擊選擇一個選項(不管首先點擊按鈕頂部)。
import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JDialog;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class DialogFocus extends JDialog {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JComboBox jComboBox = null;
public static void main(String[] args) {
new DialogFocus(null);
}
/**
* @param owner
*/
public DialogFocus(Frame owner) {
super(owner);
initialize();
setLookAndFeel();
this.setVisible(true);
}
public void setLookAndFeel() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJComboBox(), BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes jComboBox
*
* @return javax.swing.JComboBox
*/
private JComboBox getJComboBox() {
if (jComboBox == null) {
String[] items = {"1", "2", "3", "4", "5"};
jComboBox = new JComboBox(items);
jComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
showDialog();
}
});
}
return jComboBox;
}
protected void showDialog() {
JOptionPane.showMessageDialog(this, "Selection made");
}
}
我使用的代碼非常複雜,所以我將這裏的代碼的基本示例放在一起。隨着外觀和感覺的設置,它需要2次點擊來點擊一個有效的選項,但沒有它,它需要一次點擊。 (在構造函數中註釋掉setLookAndFeel()
)。
有沒有人有任何想法如何解決這個問題,以確保它只需要1次點擊,無論外觀和感覺如何?
預先感謝
我不明白你的問題,但你想setPopupVisible(false)時執行actionPerformed? – nachokk
我希望彈出窗口只需單擊一次(而不是一次點擊即可獲得焦點,另一次點擊「確定」)即可完成。沒有使用invokeLater() – Skepi
而不是actionListener,你嘗試了itemListener嗎? – nachokk