我正在设计一个简单的GUI(在Eclipse中使用WindowBuilder Pro),只需在按下按钮(测试)后在textArea
中显示“Hello World”。
然而,当我按下按钮时,它不会显示在文本区域中!有人可以调整代码或至少告诉我该怎么做?
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);
}
}
答案 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(),它应该可以工作。