2017-05-29 78 views
0

我使用NetBeans为学校做了一件工作。我有一个巨大的JPanel,它包含一个巨大的JFrame。该JFrame作为5个小JFrames,1是带按钮的菜单,其他的是带有文本的框,当我在按钮中选择时,它们将会交换。 当一个框显示了其他的都是用下面的代码不可见的IM(不知道这是否是最好的):JPanel使我的布局变形

 public ConversorUI() { 
      initComponents(); 
      PanelVazio.setVisible(true); 
      PanelTemp.setVisible(false); 
      PanelComp.setVisible(false); 
      PanelMoedas.setVisible(false); 
      this.pack(); 
     } 

我的问题是,当我运行我的程序我有一个很大的空间没有什么,只有在它下面出现的组件出现。我希望他们出现在我的窗口顶部。我能做什么 ?

ANSWER 过了一段时间来寻找我才意识到我可以从JPanel的设置布局,以卡布局,创造了相互JPanels的代码激活它们:

private void DinheiroButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     //Remove Panels 
     CAIXA.removeAll(); 
     CAIXA.repaint(); 
     CAIXA.revalidate(); 

     //Add Panels 
     CAIXA.add(DinheiroBox); 
     CAIXA.repaint(); 
     CAIXA.revalidate(); 
    }   
+2

为了更好的帮助,请创建并发布一个有效的[MCVE],其实是一个** **小,最小,程序,我们可以编译和运行不变,没有外部依赖(如数据库或图像),并直接向我们展示您的问题。还要考虑发布一个链接到两个图像,一个显示所需的GUI和另一个显示观察。 –

+1

1)除了由@HovercraftFullOfEels建议的MCVE之外,还可以提供ASCII艺术或简单的GUI图形布局*,以最小尺寸显示,如果可调整大小,则具有更多宽度和高度。 2)使用仅偶尔出现的组件的最佳策略是将它和一个空白面板放置到['CardLayout']中(http://download.oracle.com/javase/8/docs/api/java/awt /CardLayout.html),如[本答案](http://stackoverflow.com/a/5786005/418556)所示。 –

+2

'我有一个巨大的JPanel,包含一个巨大的JFrame.' - 不,因为你不能将JFrame添加到JPanel。 '将JFrame作为5个小JFrame,' - 你不能将JFrame添加到JFrame。因此,除了张贴您的[mcve]以适当的术语问一个适当的问题。另外,变量名不应以大写字符开头。在发布代码时遵循Java约定。 – camickr

回答

0

看起来你正在使用Java Swing,对吧?

如果您有包含JFrames的JPanel,那么您会发生任何错误。要构建正确的UI,您必须在JFrame内添加JPanel。

此外,要达到正确的组件顺序并将您需要配置对应的布局,here是说明。

+0

[这里](https://docs.oracle.com/javase/tutorial/uiswing/examples/start/)是如何在SWING上构建正确的UI表示的示例。要实现面板之间的切换,您可以移除已经存在的面板并将新面板添加到容器中,否则您可以使用'.setVisible(false)'而不是remove和其他'.setVisible(true)'来显示它。 –

+0

我已经得到了答案,谢谢你的时间。 :) –

0

您可以加载一个JFrame的 由于您添加的每个jframe都有自己的位置和可视性,因此不会执行任何操作以删除 尝试保存每个jframe并更改 删除旧的并添加新的

+0

我已经得到了答案,谢谢你的时间。 :) –

0

为什么你使用多个JFrames来做到这一点?从我可以看到,它会是一个更好的主意,使用JPanels,可以照顾个人的任务,如菜单和按钮等。

我比较新使用javax.swing我自己,但从我知识你每个窗口一次只能有一个框架(就像其他人说的)。

从我已经能够从你的项目中辨别出来的情况,你可能甚至不需要多个面板。您只需要一个带按钮的菜单面板,以及根据按钮显示文本的多个标签或JLabel。你可以写你的addActionListener方法,像这样使用的setText方法:

buttonName.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      labelName.setText("blah blah blah"); 
      //and whatever else you may need to do 
     } 
    }); 
+0

我已经得到了答案,谢谢你的时间。 :) –