Java 在通过拖动鼠标手动调整JFrame和右角大小后重新定位组件
我已经在NetBeans Swing Builder中构建了这个Java 在通过拖动鼠标手动调整JFrame和右角大小后重新定位组件,java,resize,listener,Java,Resize,Listener,我已经在NetBeans Swing Builder中构建了这个JFrame,并在下面添加了ComponentListener this.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent evt) { //Get mainJPanel last Bounds after resizing Rectangle panelCurr
JFrame
,并在下面添加了ComponentListener
this.addComponentListener(new ComponentAdapter()
{
public void componentResized(ComponentEvent evt) {
//Get mainJPanel last Bounds after resizing
Rectangle panelCurrentRec = new Rectangle();
panelCurrentRec = mainJPanel.getBounds();
//Calculate gained/losed how much vertical pixels
int heightVariation = panelCurrentRec.height - panelOriginalHeight;
//First set new vertical and horizontal bounds for below jtable and revalidate
Rectangle rec = new Rectangle();
rec = jScrollPane2.getBounds();
jScrollPane2.setBounds(rec.x, rec.y+(heightVariation/2), mainJPanel.getWidth(), rec.height+(heightVariation/2));
jScrollPane2.revalidate();
//Second set new vertical and horizontal bounds for above jtable and revalidate
rec = jScrollPane1.getBounds();
jScrollPane1.setBounds(rec.x, rec.y, mainJPanel.getWidth(), rec.height+(heightVariation/2));
jScrollPane1.revalidate();
}
});
当我按下JFrame everythings fine的最大化。所有获得的空间计算正确,两个JTables获得新的Y定位
,并用一半的获得空间扩展自身并填充屏幕
但当我转到JFrame的右角时,按住并尝试手动调整大小,ComponentListener
触发的次数太多。如果我快速拖动并完成大小调整,一切都很好
但有时(通常缓慢拖动或长时间拖动)JTables未垂直调整大小,并转到原始的Y位置,如下所示。但是“水平调整总是有效的”
在有问题的拖动和调整大小后,稍微拖动一下,即可再次恢复正常
不要使用空布局李>
不要使用收进边界(…)李>
不要使用ComponentListener
一定要使用布局管理器。Swing设计用于布局管理器。在您的情况下,表的大小看起来是相同的,因此最简单的方法可能是使用
您可能需要使用具有不同布局的多个嵌套面板来获得所需的效果