2012-04-19 78 views
0

我想創建一個方法來更新JComboBox,以便當用戶在文本字段中輸入內容時,某些代碼將相應地處理該條目並更新JComboBox。我遇到的問題是我可以更新JComboBox,但第一次打開時,該框沒有刷新其中的選項長度,如下面的代碼所示,它顯示額外的空白區域。我不知道是否有更好的方法來做到這一點,但這是我想出的。更新JComboBox後,如何刷新框的長度

感謝您的幫助,

import java.awt.event.*; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Catch{ 
public static JComboBox dropDown; 
public static String dropDownOptions[] = { 
     "Choose", 
     "1", 
     "2", 
     "3"}; 
public static void main(String[] args) { 
    dropDown = new JComboBox(dropDownOptions); 
    final JTextField Update = new JTextField("Update", 10); 
    final JFrame frame = new JFrame("Subnet Calculator"); 
    final JPanel panel = new JPanel(); 
    frame.setSize(315,430); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    Update.addFocusListener(new FocusListener(){ 
    public void focusGained(FocusEvent arg0) { 
      } 
      public void focusLost(FocusEvent arg0) { 
       dropDown.removeAllItems(); 
       dropDown.insertItemAt("0", 0); 
       dropDown.insertItemAt("1", 1); 
       dropDown.setSelectedIndex(0); 
      } 
       }); 
     panel.add(Update); 
     panel.add(dropDown); 
     frame.getContentPane().add(panel); 
     frame.setVisible(true); 
     Update.requestFocus(); 
     Update.selectAll(); 
    } 
} 
+0

我發起你的代碼,但我真的不明白是什麼問題。其實,我不明白該節目應該做什麼。只要我們打開組合框,數值將在內部更改,並且始終顯示「0」,「1」。 – 2012-04-19 18:49:13

+0

抱歉有任何混淆。這只是整個工具的代碼snipet。爲了簡單起見,我正在嘗試創建。如果在jtextfield中鍵入A,則組合框使用數組A.如果在jtexfield中鍵入b,則組合框包含數組B.等等。我只是從我上傳的代碼中刪除了所有的檢查部分,以儘可能簡化代碼,只留下我的錯誤。錯誤是第一次單擊組合框0和1時被包含但有額外的空格。之後,它工作正常,只是第一次迭代不能正常工作。 – dannyn382 2012-04-19 20:59:40

回答

3

1)JTextFieldActionListener

2監聽ENTER key)刪除FocusListener

3)如約增加新Item去年ItemJTextField到在JList,只有你有修改爲JComboBox相加法insertItemAt()正確

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ListBottom2 { 

    private static final long serialVersionUID = 1L; 
    private JFrame frame = new JFrame(); 
    private DefaultListModel model = new DefaultListModel(); 
    private JList list = new JList(model); 
    private JTextField textField = new JTextField("Use Enter to Add"); 
    private JPanel panel = new JPanel(new BorderLayout()); 

    public ListBottom2() { 
     model.addElement("First"); 
     list.setVisibleRowCount(5); 
     panel.setBackground(list.getBackground()); 
     panel.add(list, BorderLayout.SOUTH); 
     JScrollPane scrollPane = new JScrollPane(panel); 
     scrollPane.setPreferredSize(new Dimension(200, 100)); 
     frame.add(scrollPane); 
     frame.add(textField, BorderLayout.NORTH); 
     textField.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       JTextField textField = (JTextField) e.getSource(); 
       DefaultListModel model = (DefaultListModel) list.getModel(); 
       model.addElement(textField.getText()); 
       int size = model.getSize() - 1; 
       list.scrollRectToVisible(list.getCellBounds(size, size)); 
       textField.setText(""); 
      } 
     }); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ListBottom2 frame = new ListBottom2(); 
      } 
     }); 
    } 
}