【发布时间】:2010-02-20 19:08:47
【问题描述】:
我正在使用 Java 编写一个简单的绘画程序,并且我希望在调整 JFrame 组件大小时调用一些方法。但是我找不到像 windowResizedListener 这样的方法或像 windowResizedEvent 这样的事件。 我该怎么办?!
【问题讨论】:
我正在使用 Java 编写一个简单的绘画程序,并且我希望在调整 JFrame 组件大小时调用一些方法。但是我找不到像 windowResizedListener 这样的方法或像 windowResizedEvent 这样的事件。 我该怎么办?!
【问题讨论】:
用componentResized() 实现ComponentAdapter:
frame.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent componentEvent) {
// do stuff
}
});
【讨论】:
ComponentListener的所有方法,请改用ComponentAdapter。
覆盖ComponentAdapter 的特定方法是实现ComponentListener 的所有方法的便捷替代方法。看到here 的几个示例说明了API 中提到的“创建侦听器对象的便利性”。
【讨论】:
您必须使用来自ComponentListener 的componentResized。
【讨论】:
ComponentAdapter 示例
//Detect windows changes
window.addComponentListener(new ComponentAdapter( ) {
public void componentResized(ComponentEvent ev) {
label.setText(ev.toString());
}
});
【讨论】:
为了访问窗口调整大小方法事件,我在子类中实现了ComponentListener。这是一个自定义 JPanel 类,可用于将窗口大小写入 GUI 内的 JLabel。只需在您的 main 方法中实现这个类并将其添加到您的 JFrame 中,您就可以调整窗口大小,它会动态地显示您窗口的像素大小。 (注意你必须将你的 JFrame 对象添加到 Class 中)
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) {
}
}
}
【讨论】: