2017-01-08 6 views
1

Wie kann man einer anderen Klasse erlauben, JTextArea von einer anderen Klasse zu ändern?JTextArea-Wert von einer anderen Klasse ändern

Zum Beispiel lassen Sie uns sagen, ich habe zwei Klassen:

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

Wie ich Anweisungen JTextArea (Das Bedienfeld ändern .java) von MenuBar.class?

+1

Sie sollten eine M-V-C-Programmstruktur erstellen. –

Antwort

0

Zunächst einmal der Code-Snippet von MenuBar nicht kompiliert wegen eines Kommas in folgenden Zeile:

private JMenuItem openMenuItem,; 

Jetzt haben Sie eine Klasse Attribut Befehle, die ein JTextArea Objekt in dem Klasse-Panel ist. Dies ist privat, so dass nur die Klasse Panel es erreichen kann, was gut ist. Wenn Sie den Wert dieser Eigenschaft von einer anderen Klasse abrufen oder festlegen möchten, können Sie einen Getter/Setter für diese Eigenschaft hinzufügen.

In Panel hinzufügen folgenden Code:

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

    public JTextArea getInstructions() { 
     return instructions; 
    } 

setInstructions ist das Verfahren, in dem Sie suchen, können Sie den Befehl TextArea- mit dem Wert Sie als Parameter übergeben.

Bitte ändern Sie die private Klasse in MenuBar mit folgendem Code, um zu zeigen, was ich meine.

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

Ich habe auch einen Testdruck die Setter-Werke zu validieren.

Verwandte Themen