[英]How to create JcomboBoxes with different reaction?
我的問題是,SyntaxPanel中的每個JComboBox都是相同的 ! 我以為我可以遍歷comboBox的名稱,但這不會改變任何內容。 也許我應該將其添加到Jlist / List中,但是該列表無法與JComboBox類型一起使用。
為了進一步使用,我想遍歷SyntaxPanel中的任何JComboBox:
非常感謝您的幫助=)
包裹閱讀器;
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();
}
}
在您的循環中
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);
需要將動作偵聽器中的變量相應地更改為新的局部變量。
您正在添加JComboBoxes的新實例,但是您只有一個對ComboBox的引用,在構建面板之后,該引用最終指向您創建的最后一個實例。
而是創建一個列表並在將框添加到面板的同時填充它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.