简体   繁体   English

如何创建具有不同反应的JcomboBox?

[英]How to create JcomboBoxes with different reaction?

My Problem is that every JComboBox in the SyntaxPanel is the same ! 我的问题是,SyntaxPanel中的每个JComboBox都是相同的 I thought i could iterate over the name of the comboBox but this dont change anything. 我以为我可以遍历comboBox的名称,但这不会改变任何内容。 Maybe i should add it to a Jlist/List but the list wont work with the type JComboBox.. 也许我应该将其添加到Jlist / List中,但是该列表无法与JComboBox类型一起使用。

For further use i want to iterate over any JComboBox in the SyntaxPanel: 为了进一步使用,我想遍历SyntaxPanel中的任何JComboBox:

  • so that i can take the value from it 这样我就可以从中获取价值
  • to set the default value with the value of the JComboBox cbSyntax 使用JComboBox cbSyntax的值设置默认值
  • Thank you very much for any help =) 非常感谢您的帮助=)

    package reader; 包裹阅读器;

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.LinkedList;
    import java.util.List;
    
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    @SuppressWarnings("serial")
    public class Rename extends JFrame {
        private Integer i=0;
    
        private List<JComboBox> llSyntax = new LinkedList<JComboBox>();
    
        private JPanel jpOption;
        private JComboBox cbOption;
        private JLabel lOption;
    
        private JPanel jpControl;
        private JButton jbRemove;
        private JButton jbAdd;
        private JButton jbUmbenennen;
    
        private JPanel jpSyntax;
        private JComboBox cbSyntax;
        private DefaultComboBoxModel cbmSyntax = new DefaultComboBoxModel(new String[] {"artist","year","album"});
        //private List<JComboBox> lJComboBox = new List<JComboBox>();
    
        private DefaultComboBoxModel cbmOption = new DefaultComboBoxModel(new String[] { "artist", "album", "track" }); 
    
        Rename() {
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            this.setSize(500, 200);
            this.setLocation(500, 500);
            this.setPreferredSize(new Dimension(500, 500));
            this.setLayout(new BorderLayout());
    
            OptionPanel();
            SyntaxPanel();
            ControlPanel();
    
            this.setVisible(true);
        }
    
        public void OptionPanel() {
            jpOption = new JPanel();
            this.add(jpOption, BorderLayout.PAGE_START);
    
            lOption = new JLabel();
            lOption.setText("Welcher Background soll aktiv sein?");
            jpOption.add(lOption);
    
            cbOption = new JComboBox(cbmOption);
            cbOption.addActionListener(new alOption());
            jpOption.add(cbOption);
        }
    
        public void SyntaxPanel() {
            //JPanel für Syntax Buttons
            jpSyntax = new JPanel(new GridBagLayout());
            this.add(jpSyntax);
    
            for (i=0; i < 2; i++) {
                cbSyntax = new JComboBox(cbmSyntax);
                cbSyntax.setName("combobox"+i.toString());
                jpSyntax.add(cbSyntax);
    
                //Wie befüllt man comboBox mit arraylist
    //          for (int x = 0; x < alSyntax.size(); x++) {
    //              cbSyntax.addItem(alSyntax.get(x));
    //              {llSyntax.add(cbSyntax);}
    //          }
            }
    
            //System.out.println(cbSyntax.getSelectedItem());
    
        }
    
        public void ControlPanel() {
            jpControl = new JPanel();
            this.add(jpControl, BorderLayout.PAGE_END);
    
            jbAdd = new JButton();
            jbAdd.setText("Add");
            jbAdd.addActionListener(new alAdd());
            jpControl.add(jbAdd);
    
            jbRemove = new JButton();
            jbRemove.setText("Remove");
            jbRemove.addActionListener(new alRemove());
            jpControl.add(jbRemove);
    
            jbUmbenennen= new JButton();
            jbUmbenennen.setText("Umbenennen");
            jbUmbenennen.addActionListener(new alUmbenennen());
            jpControl.add(jbUmbenennen);        
    
        }
    
        private class alOption implements ActionListener {
            @Override //setzt die Umgebung
            public void actionPerformed(ActionEvent e) {
    
                int i = cbOption.getSelectedIndex();
                //Set the Background for the ComboBoxes of the Syntax Panel
            }
        }
    
        private class alAdd implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                cbSyntax = new JComboBox(cbmSyntax);
                jpSyntax.add(cbSyntax);
    
                jpSyntax.revalidate();
                jpSyntax.repaint();
    
                // add(buttonList.get(1)); // am schluss einfügen.
            }
        }
    
        private class alRemove implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
    
                System.out.println("remove");
            }
        }
    
        private class alUmbenennen implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
    //          for (JComboBox cb : llSyntax) 
    //                  ArrayList<String> test.add(JComboBox.getSelectedItem());
                //
    
                // add(buttonList.get(1)); // am schluss einfügen.
            }
        }
        public static void main(String[] args) {
            @SuppressWarnings("unused")
            Rename ren = new Rename();
    
        }
    
    }
    

    In your loop, 在您的循环中

       for (i=0; i < 2; i++) {
                cbSyntax = new JComboBox(cbmSyntax);
                cbSyntax.setName("combobox"+i.toString());
                jpSyntax.add(cbSyntax);
    
            }
    

    declare a local variable and add it to your jpSyntax like this: 声明一个局部变量,并将其添加到您的jpSyntax中,如下所示:

       for (i=0; i < 2; i++) {
                JComboBox box = new JComboBox(cbmSyntax);
                box.setName("combobox"+i.toString());
                jpSyntax.add(box);   
            }
    

    Further, 进一步,

    cbSyntax = new JComboBox(cbmSyntax);
    jpSyntax.add(cbSyntax);
    

    in the actionlistener needs to be changed accordingly to a new local variable. 需要将动作侦听器中的变量相应地更改为新的局部变量。

    You are adding new instances of JComboBoxes but you only have a single reference to a ComboBox which after you build the panel ends up pointing to the last one you created. 您正在添加JComboBoxes的新实例,但是您只有一个对ComboBox的引用,在构建面板之后,该引用最终指向您创建的最后一个实例。

    Instead create a List and populate it at the same time you add boxes to the panel. 而是创建一个列表并在将框添加到面板的同时填充它。

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM