我有一個 Java Swing 應用程式,其中一些資料顯示在可編輯的組合框中。組合框顯示在單獨的框架中。單擊按鈕時會臨時打開框架。框架沒有視窗裝飾,并且在失去焦點(即用戶在視窗外單擊)時關閉/處理。當框架關閉時,組合框內容被保存。
這很好用,除了最后編輯的組合框。對于最后一個組合框,當視窗失去焦點時,內容仍在編輯中。由于在視窗失去焦點之前沒有完成編輯,因此該#getSelectedItem()方法回傳 null。JComboBox至少我認為這是正在發生的事情。
當視窗在處理框架之前失去焦點時,如何完成編輯并選擇已編輯的文本?
這是一個最小的可重現示例:
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
class Example extends JFrame {
public static void main(String[] args) {
new Example();
}
public Example() {
Container c = getContentPane();
JPanel panel = new JPanel();
JComboBox<String> box1 = new JComboBox<String>();
box1.setEditable(true);
panel.add(box1);
JComboBox<String> box2 = new JComboBox<String>();
box2.setEditable(true);
panel.add(box2);
c.add(panel);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
this.addWindowFocusListener(new WindowAdapter() {
public void windowLostFocus(WindowEvent e) {
System.out.println("Field 1: " box1.getSelectedItem() ". Field 2: " box2.getSelectedItem() ".");
System.exit(0);
}
});
}
}
示例類將顯示一個帶有兩個可編輯組合框的框架。如果單擊框外,應用程式將在列印兩個組合框的內容后退出。您會注意到,null如果僅訪問過一次,則會列印最后編輯的組合框。
uj5u.com熱心網友回復:
FocusListener向用作編輯器的組合框文本欄位添加一個。當文本欄位失去焦點時應該生成一個事件。
請參閱訪問編輯器組件的getEditor()方法。JComboBox
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/415686.html
標籤:
