簡體   English   中英

如何創建具有不同反應的JcomboBox?

[英]How to create JcomboBoxes with different reaction?

我的問題是,SyntaxPanel中的每個JComboBox都是相同的 我以為我可以遍歷comboBox的名稱,但這不會改變任何內容。 也許我應該將其添加到Jlist / List中,但是該列表無法與JComboBox類型一起使用。

為了進一步使用,我想遍歷SyntaxPanel中的任何JComboBox:

  • 這樣我就可以從中獲取價值
  • 使用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();
    
        }
    
    }
    

    在您的循環中

       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.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM