Как создать JcomboBox с разной реакцией? - PullRequest
0 голосов
/ 29 декабря 2010

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

Для дальнейшего использования я хочу перебрать любой JComboBox в 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();

    }

}

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

В вашем цикле,

   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 необходимо изменить соответственно на новую локальную переменную.

0 голосов
/ 29 декабря 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...