2016-09-13 43 views
0
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Background { 
    JFrame frame = new JFrame(); 
    JMenuBar menubar; 
    JTextArea field; 
    JMenuItem black, white; 

    Background(){ 

    frame.setLayout(new GridLayout(1,2)); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(new Dimension(600,200)); 

    JPanel jp1 = new JPanel(); 
    jp1.setBackground(Color.BLACK); 

    field = new JTextArea(); 
    field.setLayout(new BoxLayout(field, BoxLayout.Y_AXIS)); 
    for(String m : message){ 
     field.add(new JLabel(m)); 
    } 

    menubar = new JMenuBar(); 
    frame.setJMenuBar(menubar); 
    JMenu changecolor = new JMenu("change color"); 
    menubar.add(changecolor); 
    black = new JMenuItem("black"); 
    white = new JMenuItem("black"); 

    black.addActionListener(new FarbListener(frame, Color.WHITE)); 


    changecolor.add(black); 
    changecolor.add(white); 

    frame.add(field); 
    frame.add(jp1); 
    frame.setVisible(true); 
    } 

    class FarbListener implements ActionListener{ 
     private final JFrame frameToWorkOn; 
     private final Color colorToSet; 

     FarbListener(JFrame frameToWorkOn, Color colorToSet){ 
     this.frameToWorkOn = frameToWorkOn; 
     this.colorToSet = colorToSet; 
    } 

    public void actionPerformed(ActionEvent e) { 
     frameToWorkOn.setBackground(colorToSet); 
    } 
    } 

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

}GUI - ActionListener的構造函數,如何讓它們工作?

我需要創造一個GUI,並添加一個ActionListener到JMenuItems。

GUI工作得很好,但我無法使ActionListener正常工作。

代碼給出我無法改變它(它需要實現ActionListener,我需要寫一個構造函數)。

當我按下MenuItem「黑色」時,它會改變爲背景顏色。

+0

你是什麼意思「實際聽」?它是不是像它應該被稱爲?你看過「actionPerformed」的參數嗎? – ChiefTwoPencils

+0

請閱讀有關Java命名約定。類名開始UpperCase。總是。 – GhostCat

+0

是的先生,我標記了空間的問題,我不知道該寫什麼......如果我在操作中寫jp1.setBackground()執行它給了我錯誤「創建類jp1」....我沒有明白,我應該寫什麼作爲構造函數... – klarz

回答

1

對於您的具體問題;我會說:你只需要把這個事情監聽器,像這樣:

class FarbListener implements ActionListener{ 
    private final JFrame frameToWorkOn; 
    private final Color colorToSet; 

    FarbListener(JFrame frameToWorkOn, Color colorToSet){ 
    this.frameToWorkOn = frameToWorkOn; 
    this.colorToSet = colorToSet; 
} 

public void actionPerformed(ActionEvent e) { 
    frameToWorkOn.setBackground(colorToSet); 
} 

}

您可能會使事情總通過轉動你的局部變量到領域背景類的容易,像:

public class Background { 
    private final JFrame frame = new JFrame(); 

    public Background() { 
    frame.setVisible(); 

等等......現在;你不需要再傳遞框架對象,因爲你的內部類只是簡單地知道它。

+0

它幫助了很多。謝謝我終於明白了! – klarz

相關問題