我试图用Java做到这一点:
public class Fram extends JFrame{
public void init(){
addWindowStateListener(new java.awt.event.WindowStateListener() {
public void windowStateChanged(java.awt.event.WindowEvent evt) {
wsc(evt);
}
});
}
private void wsc(java.awt.event.WindowEvent evt) {
System.out.println(evt.getNewState() == Frame.MAXIMIZED_BOTH);
System.out.println(this.getWidth());
}
}
输出很晚。
当我最大化它时,值为360,但实际值为1260。 如何在最大化后获得宽度?
答案 0 :(得分:1)
有点令人困惑。实际上你必须实现ComponentListener。然后调用componentResized()。这将为您提供正确的宽度。
答案 1 :(得分:1)
当我最大化它时,值是360但实际值是1260热以获得最大化后的宽度?
尝试将代码包装在SwingUtiltities.invokeLater()
中。这将把代码放在事件调度线程(EDT)的末尾,因此它应该在调整大小代码完成后执行。
答案 2 :(得分:0)
好的,我找到了解决方案 这篇文章不是很好。
How to detect JFrame window minimize and maximize events?
这段代码,诀窍
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JFrame;
public class Main extends JFrame implements ComponentListener {
public Main() {
addComponentListener(this);
}
public void componentHidden(ComponentEvent e) {
System.out.println("componentHidden");
}
public void componentMoved(ComponentEvent e) {
System.out.println("componentMoved");
}
public void componentResized(ComponentEvent e) {
System.out.println("componentResized");
if (getState() == Frame.ICONIFIED) {
System.out.println("RESIZED TO ICONIFIED");
} else if (getState() == Frame.NORMAL) {
System.out.println("RESIZED TO NORMAL");
} else {
System.out.println("RESIZED TO MAXIMIZED");
}
}
public void componentShown(ComponentEvent e) {
}
public static void main(String[] arg) {
Main m = new Main();
m.setVisible(true);
m.setSize(new Dimension(300, 100));
m.setLocation(50, 50);
}
}