2014-12-27 78 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"); 
    } 
} 

這是我迄今寫的。每次點擊一個按鈕時,我已經獲得了用於打印新文本的代碼。但代碼不會每個按鈕分開來,所以如果它的按鈕1或BUTTON2不要緊,同樣的情況發生

+2

我有一個瘋狂的想法:使用不同的一個'ActionListener'爲每個不同的按鈕。 – Tom

+0

爲您想要做不同事情的按鈕編寫不同的'ActionListener'類。 –

+0

請考慮看看[如何使用操作](http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) – MadProgrammer

回答

1

如果需要使用相同的ActionListener所有JButton S,然後用

aButton.setActionCommand("First"); 

同樣,對於其他JButton S設定ActionCommands也和在actionPerformed方法,使用

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

而且同樣添加其他if s到檢查OT她按了一下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()); 
相關問題