我有这个简单的代码:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
import javax.swing.border.LineBorder;
@SuppressWarnings("serial")
public class MyFrame extends JFrame{
SpringLayout layout;
JPanel contentPane;
JPanel pane1;
public MyFrame(){
layout=new SpringLayout();
contentPane=new JPanel(layout);
setContentPane(contentPane);
setSize(new Dimension(800,600));
pane1=new JPanel(new SpringLayout());
pane1.setPreferredSize(new Dimension(200,200));
pane1.setBorder(new LineBorder(Color.black));
layout.putConstraint(SpringLayout.WEST, pane1, 0, SpringLayout.WEST, contentPane);
layout.putConstraint(SpringLayout.EAST, pane1, getWidth()/2, SpringLayout.WEST, contentPane);
contentPane.add(pane1);
setEvents();
setVisible(true);
}
private void setEvents(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
this.addComponentListener(new ComponentListener(){
@Override
public void componentHidden(ComponentEvent arg0) {}
@Override
public void componentMoved(ComponentEvent arg0) {}
@Override
public void componentResized(ComponentEvent arg0) {
System.out.println("RESIZING EVENT:");
System.out.println("Frame Size: "+getWidth()+", "+getHeight());
System.out.println("Pane1 Size: "+pane1.getWidth()+", "+pane1.getHeight()+"\n");
layout.putConstraint(SpringLayout.EAST, pane1, getWidth()/2, SpringLayout.WEST, contentPane);
contentPane.revalidate();
contentPane.repaint();
}
@Override
public void componentShown(ComponentEvent arg0) {}
});
}
public static void main(String[] args){
MyFrame frame=new MyFrame();
}
}
我无法获得我的 pane1 组件的实际大小。
如果我执行我的代码,最大化并恢复我的窗口,数字是错误的。让我用这段代码的简单输出来解释一下:
调整大小事件:框架尺寸:800、600 窗格1 尺寸:400、200
调整大小事件:框架尺寸:800、600 窗格1 尺寸:400、200
调整大小事件:框架尺寸:1382、744 窗格1 尺寸:400、200在此处最大化
调整大小事件:框架大小:800、600 窗格 1 大小:691、200在此处恢复
如您所见,最后一个尺寸值 (691, 200) 应该参考 (1382,744) 框架尺寸,而不是最后一个 (800,600)...
调用 revalidate 和 repaint 方法会更新我的图形(显示此代码的预期内容),但对解决此问题没有帮助。任何帮助表示赞赏