有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java更新整个JFrame,包括所有JC组件

我正在尝试更新一个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) 个答案

  1. # 1 楼答案

    如果不在JLabel上设置新文本(test),它永远不会知道test的值正在更改。因此,请插入以下声明:

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

    在以下语句之后的public void actionPerformed(ActionEvent e)

    test +=1;

    看看结果