按钮不会显示文本区域中的文本

时间:2014-01-23 18:55:12

标签: java swing jtextarea

我正在设计一个简单的GUI(在Eclipse中使用WindowBuilder Pro),只需在按下按钮(测试)后在textArea 中显示“Hello World”。

http://i.stack.imgur.com/PbYo8.jpg

然而,当我按下按钮时,它不会显示在文本区域中!有人可以调整代码或至少告诉我该怎么做?

public class TextA {

private JFrame frame;


/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TextA window = new TextA();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public TextA() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JTextArea textArea = new JTextArea();
    textArea.setBounds(113, 44, 226, 96);
    frame.getContentPane().add(textArea);

    JButton btnTesting = new JButton("Testing");
    btnTesting.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            JTextArea textArea = new JTextArea();
            textArea.setText("Hello World!");


        }
    });
    btnTesting.setBounds(168, 167, 117, 29);
    frame.getContentPane().add(btnTesting);
}
}

3 个答案:

答案 0 :(得分:3)

将您的代码更改为此类内容。

 final JTextArea textArea = new JTextArea();
 frame.getContentPane().add(textArea);
 btnTesting.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            textArea.setText("Hello World!");
        }
    });

您要在actionListener内创建一个新实例,以引用要添加到框架中的对象。因为@AndrewThompson总是建议不要使用null布局原因:

  

Java GUI可能必须在不同的平台上工作   屏幕分辨率&使用不同的PLAF。因此他们不是   有助于准确放置组件。组织组件   对于健壮的GUI,而是使用布局管理器或其组合   它们,以及布局填充和白色空间的边界。

答案 1 :(得分:1)

您正在处理错误的JTextArea对象。它应该是这样的:

final JTextArea textArea = new JTextArea(); // final added here
textArea.setBounds(113, 44, 226, 96);
frame.getContentPane().add(textArea);

JButton btnTesting = new JButton("Testing");
btnTesting.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            //JTextArea textArea = new JTextArea(); this should be removed.
            textArea.setText("Hello World!");


        }
    });

答案 2 :(得分:0)

您正在actionPerformed(ActionEvent e)中创建一个新的JTextArea对象。只需使用您已定义的文本区域对象并将其设置为final,因为它将用于action事件方法。您可以在动作事件方法中删除行JTextArea textArea = new JTextArea(),它应该可以工作。