我正在尝试更新JFrame
以及框架中的所有组件,包括JPanel
,JLabel
组件等。我尝试使用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();
}
}
答案 0 :(得分:3)
如果您未在test
上设置新文字(JLabel
),则永远不会知道test
的值正在发生变化。所以,请插入以下声明:
label.setText(String.valueOf(test));
public void actionPerformed(ActionEvent e)
中:
test +=1;
并查看结果。