2017-01-08 4 views
1

別のクラスが別のクラスの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 
      } 
     } 
    } 
} 

どのように私は指示JTextAreaに(パネルを変更することができます。たとえば

、のは、私は2つのクラスを持っているとしましょう.java)からMenuBar.class?

+1

M-V-Cプログラム構造の作成を検討する必要があります。 –

答えて

0

まず、メニューバーのコードスニペットは、理由の行を次のようにコンマでコンパイルされません:

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

私はまた、セッターの作品を検証するためにテストプリントを追加しました。

関連する問題