将组合框重置为第一个项目

时间:2014-05-08 18:48:55

标签: java combobox default reset

我通过查询数据库创建并填充了一个组合框。当我在程序中执行了一些其他功能时,我想将组合框重置为原始值,即空白区域。当我这样做时,我得到程序抛出的异常。

代码如下:

创建组合框:

    tableNumberJComboBox = new JComboBox(); 
    tableNumberJComboBox.setBounds( 168, 26, 80, 20 );        
    tableNumberJComboBox.setFont(new Font("Serif", Font.PLAIN, 12)); 
    tableNumberJComboBox.addItem("");
    waiterJPanel.add(tableNumberJComboBox);

然后填充它:

private void loadTableNumbers()
{
    try 
    {   
        myStatement = null; 
        myResultSet = null; 
        myStatement = myConnection.createStatement(); 

        myResultSet = myStatement.executeQuery("SELECT tableNumber FROM restauranttables");
        while (myResultSet.next()) 
        {
            tableNumberJComboBox.addItem(myResultSet.getInt(1));
        }
        myResultSet.close(); 
    }
    catch(SQLException sqlexception) 
    {
        sqlexception.printStackTrace(); 
    }
} // end method loadTableNumbers

然后将表格编号重置为空格:

    tableNumberJComboBox.setSelectedItem("");

,例外是:

线程中的异常" AWT-EventQueue-0" java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Integer

我已经尝试过setSelectedItem(0),但这并没有用。如何将其设置回原始空白区域?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果空格意味着您没有选择任何内容,则可以使用tableNumberJComboBox.setSelectedItem(-1);。那是你想做的吗?

答案 1 :(得分:0)

不要创建新的JComboBox,只需使用现有的组合框重新加载数据:

可能是这样的:

tableNumberJComboBox.removeAllItems();
loadTableNumbers();

编辑:

上述建议对我来说很好:

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

public class SSCCE extends JPanel
{
    private JComboBox<Integer> comboBox = new JComboBox<Integer>();
    private int value = 10;

    public SSCCE()
    {
        add( comboBox );
        addItems();

        JButton reset = new JButton( "Reset" );
        reset.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                comboBox.removeAllItems();
                addItems();
            }
        });
        add( reset );
    }

    private void addItems()
    {
        for (int i = 0; i < 5; i++)
            comboBox.addItem( new Integer(value++) );
    }

    private static void createAndShowUI()
    {
        JLabel label = new JLabel(new ImageIcon("mong.jpg"));

        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new SSCCE() );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

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

如果这没有帮助,那么发布一个适合自己的SSCCE。而且我们无权访问您的数据库,因此SSCCE不应包含数据库逻辑。