更新整个JFrame,包括所有JComponents

时间:2016-06-27 23:38:32

标签: java swing jframe

我正在尝试更新JFrame以及框架中的所有组件,包括JPanelJLabel组件等。我尝试使用revalidate(),但这似乎没有奏效。我在显示int的框架中有一个JLabel,当我点击JButton时,我的int迭代为1。我可以看到int的值发生了变化,但标签上的实际文本没有变化。我知道我可以使用JLabel.setText(),但是有一种方法可以用于所有组件,按下按钮会更新显示的文本/图像吗?

以下是我的代码:

package repainttest;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Window extends JFrame {
    int test = 1;
    JLabel label;

public Window() {
    setLayout(new FlowLayout());

    label = new JLabel(Integer.toString(test));
    add(label);

    JButton button = new JButton("Add");
    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
          test +=1;
            System.out.println(test);
            refresh();
        }
    });
    add(button);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void refresh() {
    SwingUtilities.updateComponentTreeUI(this);
    revalidate();
    repaint();
    }
}

1 个答案:

答案 0 :(得分:3)

如果您未在test上设置新文字(JLabel),则永远不会知道test的值正在发生变化。所以,请插入以下声明:

label.setText(String.valueOf(test));

在以下陈述后的public void actionPerformed(ActionEvent e)

test +=1;

并查看结果。