有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使JCombobox具有更改其他JCombobox上的项的函数

我的转换器程序中有3个JCombobox,一个用于类别,两个用于选择要执行的功能;我想让程序做的是,当用户在一个JCombobox中选择一个类别时,两个JCombobox将自动更改与所选类别相关的内容(请帮助我使用JCombobox更改项的功能,当一个选中其他更改值时)


共 (4) 个答案

  1. # 1 楼答案

    尝试使用itemStateChanged(java.awt.event.ItemEvent evt)

  2. # 3 楼答案

    正如JB Nizet所说,这里有一个简短的例子:

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    
    public class ConnectedComboBoxDemo extends JFrame implements ActionListener {
    
        private static final long serialVersionUID = 6108579736224814080L;
    
        private JPanel panel;
        private JComboBox combo1;
        private JComboBox combo2;
    
        public ConnectedComboBoxDemo() {
            panel = new JPanel();
            String[] combo1Item = new String[]{"val1", "val2", "val3"};
            combo1 = new JComboBox(combo1Item);
            combo1.addActionListener(this);
    
            String[] combo2Item = new String[]{"val11", "val12", "val13"};
            combo2 = new JComboBox(combo2Item);
    
            panel.setLayout(new BorderLayout());
            panel.add(combo1, BorderLayout.WEST);
            panel.add(combo2, BorderLayout.EAST);
    
            setContentPane(panel);
            pack();
            setVisible(true);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            String selectedValue = combo1.getSelectedItem().toString();
            String[] combo2Item = null;
    
            DefaultComboBoxModel model = (DefaultComboBoxModel) combo2.getModel();      
            model.removeAllElements();
    
            if(selectedValue.equals("val1")){
                combo2Item = new String[]{"val11", "val12", "val13"};
            } else if(selectedValue.equals("val2")){
                combo2Item = new String[]{"val21", "val22", "val23"};
            } else if(selectedValue.equals("val3")){
                combo2Item = new String[]{"val31", "val32", "val33"};
            }
    
            for(String val : combo2Item){
                model.addElement(val);
            }
        }   
    
        public static void main(String... args){
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new ConnectedComboBoxDemo();
                }
            });
        }
    }
    

    希望这对你有帮助

  3. # 4 楼答案

    只需在第一个组合框中添加一个ActionListener,然后在action listener的actionPerformed方法中,在第一个组合框中获取所选的值,并更改第二个组合框显示的值

    阅读Swing tutorial about combo boxes