用于更新JFrame中的文本的按钮

时间:2014-01-07 21:05:32

标签: java swing jframe

如何创建更新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);
}

3 个答案:

答案 0 :(得分:2)

您必须更新ActionListener中的时间。如果您不想删除以前的文字,则无需仅revalidaterepaint只调用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());
    }
});