Java 在通过拖动鼠标手动调整JFrame和右角大小后重新定位组件

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

我已经在NetBeans Swing Builder中构建了这个
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设计用于布局管理器。在您的情况下,表的大小看起来是相同的,因此最简单的方法可能是使用

  • 您可能需要使用具有不同布局的多个嵌套面板来获得所需的效果