0

我有一个使用 BorderLayout 并包含 jTable 和 layeredPane 的 JPanel。我需要使用 layeredPane,因为它在 jTextPane 之上包含一个 jComboBox。问题是当用户调整屏幕大小时,layeredPane 不会调整大小。我怎样才能解决这个问题?我有这样的事情:

JPanel panel = new JPanel(new Borderlayout());
MyTable table = new MyTable(); 
panel.add(table, BorderLayout.CENTER);
JLayeredPane layeredPane = new JLayeredPane();
//addind things in the layered pane
panel.add(layeredPane, BorderLayout.PAGE_END); 

对分层窗格使用布局管理器将不起作用,因为我需要重叠组件。

4

2 回答 2

1
  • 关于 JLayeredPane 的常见问题是它的子级将由 setBounds 放置,因为不支持除 Null 布局之外的标准 LayoutManager

  • 必须在事件 componentResized 上添加 ComponentListener 以更改 JPanels Bounds

  • 放置到 JPanel 的 JComponents 使用标准 LayoutManager

  • 不止一种选择是基于自定义 JXLayer for Java6 使用适当的 JLayer for Java7

于 2012-08-08T14:15:57.460 回答
1

在您发布的示例中,JLayeredPane 在具有 BorderLayout 的面板中占据了 SOUTH (BorderLayout.PAGE_END) 的位置。这意味着 CENTER 中的组件将占用提供给面板的所有额外空间。你的桌子在 CENTER。

只需将 JLayeredPane 放在 CENTER 中,将 table 放在 NORTH 中,让窗格占据所有额外空间。

有关 BorderLayout 的更多信息:http:
//docs.oracle.com/javase/tutorial/uiswing/layout/border.html

您可能还想阅读更多关于 Swing 布局的信息:http:
//docs.oracle.com/javase/tutorial/uiswing/layout/index.html

于 2012-08-08T11:32:31.943 回答