2013-10-14 84 views
0
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

class myAction extends JFrame implements ActionListener { 
    myAction() { 

     super("Lab 4 Question 1"); 

     Container c = getContentPane(); 
     JPanel p = new JPanel(); 
     JPanel p1 = new JPanel(); 

     JButton b = new JButton("Button 1"); 
     JButton b1 = new JButton("Button 2"); 
     JButton b2 = new JButton("Button 3"); 

     Font newFont = new Font("SERIF", Font.BOLD, 16); 
     b1.setFont(newFont); 
     b1.addActionListener(this); 

     JLabel l = new JLabel("Hello."); 

     p.add(b); 
     p.add(b1); 
     p.add(b2); 
     p1.add(l); 
     c.add(p); 
     c.add(p1); 

     c.setLayout(new FlowLayout()); 
     setSize(300, 300); 
     show(); 
    } 

    public static void actionPerformed (ActionEvent e) { 
     if(e.getSource().equals(b)) 
     { 
      this.l.setText("Testing"); 
     } 
    } 


    public static void main(String[] args) { 
     myAction output = new myAction(); 
    } 
} 

如何讓我的JButton b1更改我的JLabel l的值?我對編程相當陌生,所以我很抱歉你們注意到任何錯誤!我只是需要它改變,只要我點擊按鈕,我認爲我有它的權利,但我的符號無法找到,我敢肯定我不應該通過他們的方法:S如何通過單擊我的JButton來更改JLabel文本?

回答

2

好了,你甚至不添加ActionListener您的按鈕,並actionPerformed方法,非靜態的(只是刪除static)。這解決了一個問題:

b.addActionListener(this); 

另外,我建議使用,而不是直接實現ActionListener到類的匿名內部類。像這樣:

b.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
     //Do stuff 
    } 
}); 

另外,讓你的JButton's瓦爾斯。作爲實例變量(將它們移到構造函數之外)。

+0

啊,你已經失去了我,我不管怎樣,我都會試着弄明白,謝謝。 –

+0

@DáithíCushen很簡單:當你實現ActionListener時'actionPerformed'不能是靜態的。其次,通過在其中一個按鈕的addActionListener方法中傳遞'this'關鍵字來添加'ActionListener'。第三,在構造函數之外移動這些'JButton'聲明(即'JButton b = new JButton(「Button 1」);')(以下簡稱:'class myAction extends JFrame implements ActionListener {')。 –

0

b對你的actionPerformed方法是不可見的,因爲它是在構造函數中定義的。您需要將變量b移到myAction()之外。

class myAction extends JFrame implements ActionListener { 
    JButton b; 
    myAction() { 
     b = new JButton("Click"); 
+0

仍然得到3個錯誤,但它仍然無法找到我的符號L,myAction.java:39:錯誤:的actionPerformed(ActionEvent事件)在​​myAction不能ActionListener的 \t公共靜態無效的actionPerformed(ActionEvent的五)實現的actionPerformed(ActionEvent的){ 和 myAction.java:40:錯誤:非靜態變量b不能從靜態上下文 \t \t如果引用(e.getSource()等於(b)) –