2016-09-13 1 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를 creat에와 JMenuItems에 ActionListener를 추가해야합니다.

GUI는 정상적으로 작동하지만, ActionListener가 올바르게 작동하는 데 문제가 있습니다.

코드를 변경할 수 없습니다. (ActionListener를 구현해야하며 생성자를 작성해야합니다.)

"검은 색"MenuItem을 누르면 배경색이 변경됩니다.

+0

"실제로 듣기"란 무엇을 의미합니까? 그걸로 불려지는 것 아닌가요? 'actionPerformed'의 주장을 들여다 보았습니까? – ChiefTwoPencils

+0

자바 명명 규칙에 대해 읽어보십시오. 클래스 이름은 UpperCase를 시작합니다. 항상. – GhostCat

+0

네, 선생님, 내가 쓰지 않을 공간에 대한 questionmarks 표시 ... 만약 내가 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

관련 문제