2014-12-27 5 views
0

Я пытаюсь запустить эксперимент, и я не могу найти нигде, где вам поможет.различные кнопки выполняют разные действия

Мой эксперимент представляет собой набор из нескольких кнопок, каждый из которых печатает отдельную строку текста в текстовом поле SwingView.

У меня есть несколько кнопок, но каждая кнопка ведет к тому же ActionListener.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class TextArea1 implements ActionListener{ 
JTextArea text; 
int numClick = 0; 

public static void main(String[] args){ 
    TextArea1 gui = new TextArea1(); 
    gui.go(); 
    } 

public void go(){ 
    JFrame aFrame = new JFrame(); 

    JPanel aPanel = new JPanel(); 
    JPanel aPanel2 = new JPanel(); 
    JPanel aPanel3 = new JPanel(); 
    JPanel aPanel4 = new JPanel(); 
    JPanel aBoard = new JPanel(); 

    JButton aButton = new JButton("Just Click it"); 
    JButton aButton1 = new JButton("1"); 
    JButton aButton2 = new JButton("2"); 
    ... 
    JButton aButton9 = new JButton("9");   

    aPanel2.setBackground(Color.darkGray); 
    aPanel3.setBackground(Color.darkGray); 
    aPanel4.setBackground(Color.darkGray); 
    aBoard.setLayout(new GridLayout(3,3)); 

    aBoard.add(aButton1); 
    aBoard.add(aButton2); 
    ... 
    aBoard.add(aButton9); 

    aButton.addActionListener(this); 
    aButton1.addActionListener(this); 
    aButton2.addActionListener(this); 
    ... 
    aButton9.addActionListener(this); 

    text = new JTextArea(3,20); 
    text.setLineWrap(true); 

    JScrollPane scroller = new JScrollPane(text); 
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 

    aPanel.add(scroller); 

    aFrame.getContentPane() .add(BorderLayout.EAST, aPanel2); 
    aFrame.getContentPane() .add(BorderLayout.WEST, aPanel3); 
    aFrame.getContentPane() .add(BorderLayout.NORTH, aPanel4); 
    aFrame.getContentPane() .add(BorderLayout.SOUTH, aPanel); 
    aFrame.getContentPane() .add(BorderLayout.CENTER, aBoard); 

    aFrame.setSize(350,300); 
    aFrame.setVisible(true); 
    } 

public void actionPerformed(ActionEvent ev){ 
    numClick++; 
    text.append("button clicked " + numClick + "time(s) \n"); 
    } 
} 

Это то, что я написал до сих пор. Я получил код для печати нового текста каждый раз, когда нажимается кнопка. но код не делает различий между каждой кнопки, так что это не имеет значения, если это button1 или button2, такая же ситуация происходит

+2

У меня есть сумасшедшая идея: использовать другой в 'ActionListener' для каждой отдельной кнопки. – Tom

+0

Назовите разные классы ActionListener для своих кнопок, которые вы хотите делать разными способами. –

+0

Рассмотрите возможность просмотра [Как использовать действия] (http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) – MadProgrammer

ответ

1

Если вам нужно использовать один и тот же ActionListener для всех JButton с, а затем использовать

aButton.setActionCommand("First"); 

Аналогично установите ActionCommands для других JButton слишком и в методе actionPerformed используйте

if(ev.getActionCommand.equals("First")) 
    // aButton was pressed as the actionCommand of it is "First" 

и точно так же добавить другие if с, чтобы проверить, если О.Т. ее нажимали JButton.

1

Взгляните на How to Use Actions, это позволяет вам изолировать функциональность каждой кнопки, а также сделать ее пригодной для повторного использования для других вещей, таких как привязки клавиш и меню.

public class JustClickIt extends AbstractAction { 
    public JustClickIt() { 
     putValue(NAME, "Just Click It"); 
    } 

    public void actionPerformed(ActionEvent evt) { 
     // Make it happen 
    } 
} 

Затем просто применить его к кнопке ...

JButton aButton = new JButton(new JustClickIt()); 
Смежные вопросы