如何在 Swing 组件大小调整上“做点什么”?

2022-09-01 14:57:56

我有一个扩展的类。我覆盖了.JPanelprotected void paintComponent(Graphics g)

有一个变量,当面板的尺寸发生变化时,必须重新计算该变量。我如何以适当的方式做到这一点?


答案 1

就像 Adam Paynter 建议的那样,你也可以在代码中添加一个内部类,如下所示:

class ResizeListener extends ComponentAdapter {
        public void componentResized(ComponentEvent e) {
            // Recalculate the variable you mentioned
        }
}

每次调整组件大小时,都会执行在最内侧括号之间输入的代码。

然后,将此侦听器添加到组件中

myJPanel.addComponentListener(new ResizeListener());

您可以使用 获取组件。这样,您可以从内部类内部调用组件的任何方法,例如e.getComponent()

e.getComponent().getWeight();

答案 2

我想您可以覆盖各种和方法并在那里执行计算。但是,您可能找不到可以更改大小的所有位置。您可能希望让类实现 ComponentListener,并简单地侦听自身的大小调整事件。setSizeresize

警告:我不是摇摆专家。

警告:我还没有编译这个代码。

public class MyJPanel extends JPanel implements ComponentListener {

    public MyJPanel() {
        this.addComponentListener(this);
    }

    public void paintComponent(Graphics g) {
        // Paint, paint, paint...
    }

    public void componentResized(ComponentEvent e) {
        // Perform calculation here
    }

    public void componentHidden(ComponentEvent e) {}

    public void componentMoved(ComponentEvent e) {}

    public void componentShown(ComponentEvent e) {}

}

推荐