1

次の簡単なコードがあります。

button.addActionListener(new ComeOnListener(jTextArea1));
button.addActionListener(new ComeOnListener(jTextArea2));

ComeOnListener はプライベート クラスとして実装され (匿名として実装しようとすると、構文的にややこしくなります)、"Come on!" が追加されます。パラメータとして受け取るテキスト領域。それにもかかわらず、jTextArea1 を完全に無視して、jTextArea2 に追加するだけです。リスナーは次のようになります。

private class ComeOnListener implements ActionListener {

    JTextArea auxTextArea;

    public ComeOnListener(JTextArea jta) {

        auxTextArea = jta;

    }

    @Override
    public void actionPerformed(ActionEvent e) {

        auxTextArea.append("¡Come on!");
        //throw new UnsupportedOperationException("Not supported yet.");
    }


}

何が起こっているのか誰か教えてください。

どうもありがとうございました。

4

1 に答える 1

3

いつものように、SSCCEを投稿する必要があります。これは、必要な機能を示す実際のコードです

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AppendTextArea {

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame frame = createUI();
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible( true );
      }
    } );
  }
  private static JFrame createUI(){
    JFrame result = new JFrame( "TestFrame" );
    JTextArea firstArea = new JTextArea( 30, 30 );
    JTextArea secondArea = new JTextArea( 30,30 );
    JButton appendButton = new JButton( "Append" );
    appendButton.addActionListener( new ComeOnListener( firstArea ) );
    appendButton.addActionListener( new ComeOnListener( secondArea ) );

    result.add( firstArea, BorderLayout.NORTH );
    result.add( secondArea, BorderLayout.CENTER );
    result.add( appendButton, BorderLayout.SOUTH );

    return result;
  }
  private static class ComeOnListener implements ActionListener {
    private final JTextArea auxTextArea;
    public ComeOnListener(JTextArea jta) {
      auxTextArea = jta;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
      auxTextArea.append("Come on!");
    }
  }
}

ご覧のとおり、投稿したコードはこのスニペットにコピーされただけで、期待どおりに機能します。ほとんどの場合、問題はコードの別の場所にあります。

于 2012-04-12T21:33:46.480 に答える