java更新整个JFrame,包括所有JC组件
我正在尝试更新一个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();
}
}
# 1 楼答案
如果不在
JLabel
上设置新文本(test
),它永远不会知道test
的值正在更改。因此,请插入以下声明:label.setText(String.valueOf(test));
在以下语句之后的
public void actionPerformed(ActionEvent e)
test +=1;
看看结果