2015-09-13 73 views
1

我在Java中有點新手,我遇到了一個錯誤,試圖將活動監聽器添加到我的GUI中的按鈕。這是一個相當簡單的圖形用戶界面,如果沒有一點混亂。現在,只有一個標籤,按鈕和文本區域。我正在嘗試做的是,在按鈕上單擊它,然後從文本區域輸入內容,然後更改標籤以響應該內容。這是一個非常簡單的想法......但對於一個新來者來說,它非常令人煩惱。我主要是自學成才,每當我嘗試添加一個活躍的聽衆時,我都會遇到很多問題。向JButton添加一個動作監聽器

我認爲我所有嘗試添加主動偵聽器都無法使用,所以我拿出了我的嘗試。這段代碼只是GUI。除了啓動代碼之外,沒有什麼會發生。我的問題是:我將如何添加一個活動的偵聽器和響應代碼?

import java.awt.Color; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class IgnisTest extends JFrame { 
    JPanel pnlButton = new JPanel();  
    JButton say = new JButton("Say"); 
    JLabel output = new JLabel("This is a test");  
    JTextField input = new JTextField(); 


    public IgnisTest() {  
     pnlButton.setBackground(Color.black); 
     say.setPreferredSize(new Dimension(100, 25)); 
     input.setPreferredSize(new Dimension(100, 25)); 
     pnlButton.add(say); 
     pnlButton.add(input); 

     JPanel pnlWrapper = new JPanel(new GridBagLayout()); 
     pnlWrapper.setBackground(Color.black); 
     GridBagConstraints constraints = new GridBagConstraints(); 
     pnlWrapper.add(pnlButton, constraints); 

     JPanel pnlLeft = new JPanel(); 
     pnlLeft.setBackground(Color.black); 
     add(pnlWrapper, BorderLayout.SOUTH); 
     add(pnlLeft, BorderLayout.CENTER); 
     pnlLeft.add(output); 

     output.setForeground(Color.white); 
     setSize(400, 600); 
     setTitle("Ignis"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new IgnisTest(); 
    }  
} 

回答

1

做到這一點最簡單的方法添加的ActionListener。

say.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     output.setText(input.getText()); 
    } 
}); 

您可以在https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

+0

感謝找到有關匿名類的詳細信息!我之前嘗試了幾乎這個確切的代碼(我沒有output.setText(input.getText());只是設置爲將標籤更改爲測試),但我缺少@Override。我真的很感激它:直到現在我有兩個程序,一個GUI和沒有界面的程序(使用scanner和println代替)我真的很感謝幫助 – Prometheus

+0

歡迎您!順便說一句,'@ Override'不是強制性的。它指示編譯器,您打算覆蓋超類中的方法。您可以在https://docs.oracle.com/javase/tutorial/java/IandI/override.html找到更多詳細信息。 – shan1024

0

使用anonumousinnerclass或正在使用像這樣的匿名類實現的ActionListener

say.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.out.println(input.getText()); 
       //do your logic 
      } 
     });