2017-01-08 4 views
1

Как разрешить другому классу изменять JTextArea из другого класса?Изменить значение JTextArea из другого класса

Например, предположим, что у меня есть 2 классов:

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 
      } 
     } 
    } 
} 

Как изменить инструкции JTextArea (Панель .java) из MenuBar.class?

+1

Вам следует рассмотреть возможность создания структуры программ M-V-C. –

ответ

0

Прежде всего, фрагмент кода MenuBar не компилируется из-за запятой в следующей строке:

private JMenuItem openMenuItem,; 

Теперь у вас есть инструкции атрибутов класса, который является объектом JTextArea в классе Panel. Это личное, так что только классная панель может достичь этого, что хорошо. Если вы хотите получить или установить значение этого свойства другим классом, вы можете добавить для него геттер/сеттер.

В панели добавить следующий код:

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

    public JTextArea getInstructions() { 
     return instructions; 
    } 

setInstructions является способом, в котором вы ищете, вы можете установить TextArea инструкции со значением, проезжают в качестве параметра.

, пожалуйста, измените частный класс в 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 
      } 
     } 
    } 

Я также добавил тестовый отпечаток для проверки работы сеттера.

Смежные вопросы