2017-01-08 3 views
1

다른 클래스가 다른 클래스의 JTextArea를 수정하는 것을 허용하는 방법은 무엇입니까? 내가 JTextArea에 (패널 지침을 수정하는 방법다른 클래스의 JTextArea 값을 변경하십시오.

Panel.java

public class Panel extends JPanel 
{ 
    private JTextArea instructions; 

    public Panel() 
    { 
     instructions = new JTextArea(15,15); 
     add(instructions); 
    } 
} 

MenuBar.java

public class MenuBar extends JMenuBar 
{ 
    private JMenuItem openMenuItem,; 

    public MenuBar() 
    { 
     JMenu fileMenu = new JMenu("File"); 
     openMenuItem = new JMenuItem("Open"); 
     fileMenu.add(openMenuItem); 
     add(fileMenu); 

     MenuListener listener = new MenuListener(); 
     openMenuItem.addActionListener(listener); 
    } 

    private class MenuListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      if(event.getSource() == openMenuItem) 
      { 
       // change value of JTextArea from Panel.java 
      } 
     } 
    } 
} 

를 예를 들면 다음과 같습니다

,의 내가이 개 수업을 가정 해 봅시다 .Java) MenuBar.class에서? 모든

+1

M-V-C 프로그램 구조 만들기를 고려해야합니다. –

답변

0

첫째,의 MenuBar의 코드 때문에 다음 줄에 쉼표의 컴파일되지 않습니다 :

private JMenuItem openMenuItem,; 

이제 클래스 패널에서 JTextArea에 객체 인 클래스 속성 지침을 가지고있다. 이는 비공개이므로 Panel 클래스 만 연결할 수 있습니다. 다른 클래스에서 해당 속성의 값을 가져 오거나 설정하려면 getter/setter를 추가하면됩니다.

public void setInstructions(JTextArea instructions) { 
     this.instructions = instructions; 
    } 

    public JTextArea getInstructions() { 
     return instructions; 
    } 

setInstructions 당신이 당신이 매개 변수로 지나가는 값으로 명령 텍스트 영역을 설정할 수 있습니다, 찾고있는 방법이다 : 패널에서

코드를 다음을 추가합니다.

다음과 같은 코드를 사용하여 MenuBar의 개인 클래스를 수정하십시오.

private class MenuListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      if(event.getSource() == openMenuItem) 
      { 
       Panel panel = new Panel(); //I don't know where you get your panel data from so I create a new one 
       panel.setInstructions(new JTextArea("I'm a text area and I have instructions")); //set the JTextArea value 

       System.out.println(panel.getInstructions().getText()); //test print to show how you can get the JTextArea text 
      } 
     } 
    } 

또한 세터 작동을 확인하기위한 테스트 인쇄물을 추가했습니다.

관련 문제