Как создать JcomboBox с другой реакцией?

Моя проблема в том, что каждый JComboBox в SyntaxPanel одинаков! Я думал, что смогу перебрать имя comboBox, но это ничего не меняет. Возможно, мне следует добавить его в Jlist/List, но этот список не будет работать с типом JComboBox..

For further use i want to iterate over any JComboBox in the SyntaxPanel:

  • так что я могу взять значение из него
  • установить значение по умолчанию со значением JComboBox cbSyntax
  • Большое спасибо за любую помощь =)

    считыватель пакетов;

    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();
    
        }
    
    }
    

    person qwertzuiop13    schedule 29.12.2010    source источник
    comment
    @jpSyntax = new JPanel(new GridBagLayout()) вы неправильно используете GridBagLayout, вам нужны GridBagConstraints, чтобы добавить его в компонент.   -  person    schedule 29.12.2010


    Ответы (2)


    В вашей петле,

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

    объявите локальную переменную и добавьте ее в свой jpSyntax следующим образом:

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

    Дальше,

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

    в actionlistener необходимо соответственно изменить новую локальную переменную.

    person Community    schedule 29.12.2010
    comment
    Спасибо за помощь, но это не работает для (i=0; i ‹ 2; i++) { JComboBox box = new JComboBox(cbmSyntax); box.setName(cbSyntax+i.toString()); jpSyntax.add (коробка); Кстати, как я могу отправить код в ответ?? - person qwertzuiop13; 29.12.2010
    comment
    Пожалуйста, уточните, что это не работает? В вашем ответе отсутствует }. - person ; 29.12.2010
    comment
    да, конечно, но это не главное, попробуйте, и вы увидите, что в моем примере все ничем не отличается, каждый выпадающий список реагирует одинаково!! например, когда я выбираю что-то в одном, выбор идет для каждого jcombobox - person qwertzuiop13; 29.12.2010

    Вы добавляете новые экземпляры JComboBox, но у вас есть только одна ссылка на ComboBox, которая после создания панели указывает на последний созданный вами.

    Вместо этого создайте список и заполните его одновременно с добавлением полей на панель.

    person jzd    schedule 29.12.2010
    comment
    Что ты имеешь в виду, какой список использовать? Пожалуйста, определите, это не сработает. Я думаю, что неправильно понимаю ваш вопрос. - person jzd; 29.12.2010
    comment
    частный список‹JComboBox› lSyntax = новый список‹JComboBox›(); дает мне не может создать экземпляр типа List‹JComboBox› - person qwertzuiop13; 29.12.2010
    comment
    List — это интерфейс, который вы не можете создать, вместо этого вы должны использовать некоторую реализацию List, например: private List‹JComboBox› lSyntax = new ArrayList‹JComboBox›(); - person Uhlen; 29.12.2010
    comment
    и мне сначала заполнить ComboBox, а затем добавить ArrayList на панель? или я должен сделать в том же цикле`? - person qwertzuiop13; 29.12.2010