2017-03-22 6 views
0

私はJava(Swing)を使ってテキストエディタを作っています。これまで私は体を作りました。私はこの機能に問題があります:JMenuItemからJTextPaneコンテンツにアクセスするにはどうすればよいですか?

  • 新しい(JMenuItem)(JTextAreaの内容を空にします)。

ユーザーがボタンをクリックすると、JTextAreaのコンテンツを空の文字列に置き換える必要があります。 これは、(私は、このようなメニュー作成など、問題に関連しないコードをommiting、メニュー項目の追加、クラスだけを追加している。)

これはTextAreaクラスで私のコードです:

class MyTextArea extends JTextArea implements ActionListener { 
    JTextArea myTextArea; 
    public MyTextArea() { 
     init(); 

    } 

    public void init(){ 
     setLineWrap(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

    } 
} 

(あなたが見ることができるように、空。)

これは、MenuBarクラスである:

class MyMenuBar extends JMenuBar implements ActionListener { 
    private JMenu mArchivo; 
    private JMenuItem mNuevo; 

    public MyMenuBar(){ 
     init(); 
     add(mArchivo); 
    } 

    private void init() { 
     mArchivo = settingUpMenus("Archivo", "Archivo", 'A'); 
     mNuevo = settingUpMenuItems("Nuevo", "Nuevo", 'N'); 
     mArchivo.add(mNuevo); 
    } 

    private JMenu settingUpMenus(String mTitle, String mDescription,   
char mMnemonic) { 
     JMenu mMenu; 
     mMenu = new JMenu(mTitle); 
     mMenu.setMnemonic(mMnemonic); 

mMenu.getAccessibleContext().setAccessibleDescription(mDescription); 
     mMenu.setActionCommand(mTitle); 
     mMenu.addActionListener(this::actionPerformed); 
     return mMenu; 
    } 

    private JMenuItem settingUpMenuItems(String mTitle, String 
mDescription, char mMnemonic) { 
     JMenuItem mMenuItem; 
     mMenuItem = new JMenuItem(mTitle); 
     mMenuItem.setMnemonic(mMnemonic); 



    mMenuItem.getAccessibleContext(). 
setAccessibleDescription(mDescription); 
     mMenuItem.setActionCommand(mTitle); 
     mMenuItem.addActionListener(this::actionPerformed); 
     return mMenuItem; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     switch(e.getActionCommand()) { 
      case "Nuevo": 
       onNew(); 
       break; 
     } 
    } 

    private void onNew() { 

    } 
} 

そして、これは私がJTextAreaにし、JMEを追加クラスのコンストラクタですそれはアイテムとすべてのものです。

public Editor() { 
    JScrollPane myScrollPane = new JScrollPane(new MyTextArea(), 
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    systemLook(); 
    setTitle("Text editor"); 
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    setSize(new Dimension(800, 700)); 
    setVisible(true); 
    setJMenuBar(new MyMenuBar()); 
    add(myScrollPane); 
} 

しかし、私はJTextAreaのの現在のインスタンスへのアクセスを取得し、このようなJMenuのクラス内のactionPerformedメソッドでActionEventオブジェクトを親クラスを取得して、それを修正するために私の新しいボタンのために多くの方法を試してみました。しかし、私が行った意図のどれもJTextAreaにアクセスすることはできません。何か案は?私は別の方法で実装する必要がありますか?

+0

のようになりますようちょうどそれを渡します。とにかく、コンポーネントを不必要にサブクラス化してはいけません。インスタンス化するだけで直接アクセスできます。 –

+0

作成してインスタンスを作成すると、実際にそのクラスの新しいインスタンスが作成されます。私が必要とするのは、実際のインスタンスで作業することです。私はそれをコンストラクタのパラメータとして渡してみます。 –

+0

JMenuコンストラクタのパラメータとして送信されました!魅力のように働いた;) –

答えて

0

... 
private JTextArea myTextArea; 

public MyMenuBar(MyTextArea myTextArea){ 
    init(); 
    add(mArchivo); 
    this.myTextArea = myTextArea; 
} 
... 

とメインのようにメニューバーのコンストラクタ内のパラメータは、コンストラクタ内のパラメータとして渡す

MyTextArea myTextArea = new MyTextArea(); 
JScrollPane myScrollPane = new JScrollPane(myTextArea, 
     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
systemLook(); 
setTitle("Text editor"); 
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
setSize(new Dimension(800, 700)); 
setVisible(true); 
setJMenuBar(new MyMenuBar(myTextArea)); 
関連する問題