[英]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:
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.