我在swing桌面应用程序中有一个JPanel
,其中包含使用NetBeans中的GUI构建器布局的组件。在生成的源代码中,NetBeans使用GroupLayout
作为布局管理器。此JPanel
位于JScrollPane
。
我创建了另一个面板,并手动编码了第二个面板内部组件的布局。在运行时,我想将第二个面板添加到NetBeans通过单击按钮创建的现有GroupLayout
。
见下图:
在上图中,有JButton
标记为“Enter”,按钮下方的红线是我希望在点击按钮时显示新面板的位置。
上面的图片说明了当我使用GroupLayout.replace(Component existingComponent, Component newComponent)
方法时会发生什么,但我不想使用replace方法,我不想替换现有的面板,我只是想添加新的面板到现有布局。我似乎无法在GroupLayout
中找到任何方法来执行此操作。请帮忙。
很抱歉这个问题的代码太长了无法粘贴,我不想劝阻答案,但我希望你能理解我的要求。感谢。
答案 0 :(得分:0)
一种解决方案是将空面板添加到红线下方的空白处。将其展开为您想要的尺寸。然后,当您点击该按钮时,只需将该面板添加到现有的空面板,然后将revalidate()
和repaint()
添加到空主面板。
另一个解决方案是给我们一个CardLayout
这个空面板,并手动编码一个空面板,将其添加到第一个空面板,然后将要显示的面板添加到主空面板。按下按钮后,它会将CardLayout
切换到您想要显示的面板。
解决方案1。
private void jButtonXActionPerformed(java.awt.event.ActionEvent e){
jPanelX.add(new MyOherPanel());
jPanelX.revalidate();
jPanelX.repaint();
}
解决方案2.
MyPanel myPanel = null;
public GUI(){
intitComponents();
jPanelX.setLayout(new CardLayout());
jPanelX.add(new JPanel(), "emptyPanel");
myPanel = new MyPanel();
jPanelX.add(myPanel, "myPanel");
}
...
private void jButtonXActionPerformed(java.awt.event.ActionEvent e) {
CardLayout layout = (CardLayout)jPanelX.getLayout();
layout.show(jPanelX, "myPanel");
}
答案 1 :(得分:0)
使用此代码将新的JPanel替换为现有的JPanel。
NewPanelClass
是放置新Five文本字段的类,jpanel1是当前空白面板。在buttonclick事件上所谓的CurrentPanel(),您可以将面板置于空白面板位置,就像那样简单..在组布局中。
private void CurrentPanel()
{
NewPanelClass mpanel = new NewPanelClass();
this.getContentPane().remove(0);
jPanel1.removeAll();
javax.swing.GroupLayout firstPanelLayout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(firstPanelLayout);
firstPanelLayout.setHorizontalGroup(
firstPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(firstPanelLayout.createSequentialGroup().addGap(1, 1, 1).addComponent(mExploredDBView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(714, Short.MAX_VALUE)));
firstPanelLayout.setVerticalGroup(
firstPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(firstPanelLayout.createSequentialGroup().addGap(1, 1, 1).addComponent(mExploredDBView, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addGap(1, 1, 1)));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
SwingUtilities.updateComponentTreeUI(this.getContentPane());
}
谢谢..