如何创建更新JFrame文本的按钮?
当我按下更新按钮时,我只想创建一个以文本形式显示大量信息的大标签。
这不起作用:
public void JFrameTest2() {
JFrame frame = new JFrame();
frame.setSize(300, 125);
frame.setUndecorated(true);
frame.setLayout(new GridBagLayout());
frame.getContentPane().setBackground(new Color(255, 115, 100));
frame.setAlwaysOnTop(true);
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
Insets toolHeight = Toolkit.getDefaultToolkit().getScreenInsets(
frame.getGraphicsConfiguration());
frame.setLocation(scrSize.width - frame.getWidth(), scrSize.height
- toolHeight.bottom - frame.getHeight());
frame.setVisible(true);
final JTextArea Text = new JTextArea(""+System.currentTimeMillis());
JButton NewButton2 = new JButton(new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
Text.revalidate();
Text.repaint();
}
});
frame.add(Text);
frame.add(NewButton2);
}
答案 0 :(得分:2)
您必须更新ActionListener中的时间。如果您不想删除以前的文字,则无需仅revalidate
或repaint
只调用setText()
或append
。
final JTextArea textArea = new JTextArea(Long.ToString(System.currentTimeMillis()));
JButton newButton2 = new JButton("Update time");
newButton2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(final ActionEvent e) {
textArea.setText(Long.toString(System.currentTimeMillis()));
}
});
作为旁注,遵循java代码约定,变量以小写字母开头,在添加组件后调用setVisible()
。
答案 1 :(得分:1)
你必须添加
Text.setText(""+System.currentTimeMillis());
在actionPerformed回调中。只需调用revalidate / repaint就不会更新文本。
答案 2 :(得分:1)
您应该阅读#revalidate()和#repaint()所做的事情。我觉得你在这里做了一个不正确的假设。
并且它没有更新文本区域的内容,因为您还没有在actionPerformed方法中告诉它。假设您只想写出System.currentTimeMillis()
的结果,请在构建JButton时编写以下内容。
JButton NewButton2 = new JButton(new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
Text.setText(""+System.currentTimeMillis());
}
});