我有这个简单的代码:
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组件的实际大小。
如果我执行我的代码,MAXIMIZE并恢复我的窗口,数字就错了。让我用这段代码的简单输出来解释:
调整事件:框架尺寸:800,600 Pane1尺寸:400,200
调整事件:框架尺寸:800,600 Pane1尺寸:400,200
重新调整事件:画面尺寸:1382,744 Pane1尺寸:400,200 最大化
调整事件:帧大小:800,600 Pane1大小:691,200 在此恢复
如您所见,最后一个维度值(691,200)应该引用(1382,744)帧维度,而不是最后一个维度(800,600)......
调用revalidate和重绘方法会更新我的图形(显示此代码的预期结果),但对此问题没有帮助。任何帮助表示赞赏