Кнопки выполняют действия, назначенные другим кнопкам через actionlistener - PullRequest
0 голосов
/ 10 декабря 2018

У меня просто небольшая проблема с моим кодом;В настоящее время я использую карточную раскладку, в которой у меня сейчас 3 кнопки.1 (на начальной панели) добавляет JLabels к начальной панели, другая (также на начальной панели) переключается на вторую панель, которая содержит только 3-ю кнопку, которая возвращает к начальной панели.Моя проблема заключается в том, что нажатие кнопок для переключения между панелями также вызывает первую кнопку, которая создает JLabels.

Вот часть моего кода:

actionListener al = new actionListener();   
actionListener al2 = new actionListener();
actionListener al3 = new actionListener();

adddeck.addActionListener(al);//creates JLabels on panel1
addcardbutton.addActionListener(al2);//goes to panel2
goback.addActionListener(al3)//returns to panel1 

Затем часть actionlistener:

public class actionListener implements ActionListener{
    public void actionPerformed(ActionEvent event) {
        JButton src = (JButton) event.getSource();

        if(event.getSource()==adddeck)
        decklist.add(new Deck(newdeck.getText()));              
        //panel for label/buttons
        JPanel deckpanel;
        deckpanel= new JPanel();
        deckpanel.setLayout(new GridLayout(1,2));
        //label with new deck name
        JLabel decklabel;
        decklabel = new JLabel(newdeck.getText());                       
        deckpanel.add(decklabel);
        deckpanel.revalidate();
        //label with # of cards
        JLabel cardamt;             
        cardamt = new JLabel(i +"cards");
        deckpanel.add(cardamt);
        deckpanel.revalidate();         
        //add panel
        initial.add(deckpanel);
        initial.revalidate();

        if(event.getSource()==addcardbutton)
        cardLayout.show(contentPanel,"adding");

        if(event.getSource()==goback)
        cardLayout.show(contentPanel,"initial");

1 Ответ

0 голосов
/ 06 января 2019

Вы не использовали фигурные скобки ({) для операторов if.Когда оператор if не имеет фигурных скобок, в блок if включается только строка сразу после if.

Например, ваш код

if(event.getSource()==adddeck)
decklist.add(new Deck(newdeck.getText()));              
//panel for label/buttons
JPanel deckpanel;
deckpanel= new JPanel();
deckpanel.setLayout(new GridLayout(1,2));
//label with new deck name
JLabel decklabel;
decklabel = new JLabel(newdeck.getText());                       
deckpanel.add(decklabel);
deckpanel.revalidate();

эквивалентенto:

if(event.getSource()==adddeck) {
  decklist.add(new Deck(newdeck.getText()));
}              
//panel for label/buttons
JPanel deckpanel;
deckpanel= new JPanel();
deckpanel.setLayout(new GridLayout(1,2));
//label with new deck name
JLabel decklabel;
decklabel = new JLabel(newdeck.getText());                       
deckpanel.add(decklabel);
deckpanel.revalidate();

Итак, код начинается со строки //panel for label/buttons и всегда выполняется независимо от нажатия кнопки.

...