将组合框重置为第一项

问题描述 投票:0回答:3

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

代码如下:

创建组合框:

    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),但这不起作用。如何将其设置回原来的空白?

提前致谢。

java combobox default reset
3个回答
1
投票

如果空白意味着您没有选择任何内容,您可以使用

tableNumberJComboBox.setSelectedItem(-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 不应包含数据库逻辑。


0
投票

我也遇到了同样的问题,你可以使用:

tableNumberJComboBox.getSelectionModel().select(-1);

就我而言(javaFx),它很有帮助! ;希望对你也有帮助...

© www.soinside.com 2019 - 2024. All rights reserved.