窗口大小调整事件?

43

我正在使用Java编写一个简单的绘图程序,希望能在JFrame组件调整大小时调用某些方法。然而,我找不到像windowResizedListener这样的方法或类似于 windowResizedEvent 的事件。我该怎么办?

5个回答

76

实现一个带有 componentResized()ComponentAdapter

frame.addComponentListener(new ComponentAdapter() {
    public void componentResized(ComponentEvent componentEvent) {
        // do stuff
    }
});

19
为避免需要实现 ComponentListener 的所有方法,可以改用 ComponentAdapter。它具有相同的接口,但是提供了默认空实现,更加方便。 - Drew Noakes

22

覆盖ComponentAdapter的特定方法是实现ComponentListener所有方法的方便替代方法。 here中看到了几个例子,展示了API中提到的“创建监听器对象的便利性”。


3

3
为了访问窗口调整方法事件,我在子类中实现了ComponentListener。这是一个自定义的JPanel类,您可以使用它在GUI中将窗口大小写入JLabel中。只需在主方法中实现此类并将其添加到JFrame中,您就可以调整窗口大小,并动态显示窗口的像素大小。(注意,您必须将JFrame对象添加到该类中)。
package EventHandledClasses;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentListener;
public class DisplayWindowWidth extends JPanel{
JLabel display;
JFrame frame;
public DisplayWindowWidth(JFrame frame){
        display = new JLabel("---");
        this.frame = frame;
    
        frame.addComponentListener(new FrameListen());
        add(display);
        setBackground(Color.white);
    }

    private class FrameListen implements ComponentListener{
        public void componentHidden(ComponentEvent arg0) {
        }
        public void componentMoved(ComponentEvent arg0) {   
        }
        public void componentResized(ComponentEvent arg0) {
            String message = " Width: " +
            Integer.toString(frame.getWidth());
            display.setText(message);
        
        }
        public void componentShown(ComponentEvent arg0) {
        
        }
    }
}

2
使用ComponentAdapter的示例
//Detect windows changes
window.addComponentListener(new ComponentAdapter( ) {
  public void componentResized(ComponentEvent ev) {
   label.setText(ev.toString());
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接