作为JButton点击的结果显示JFrame?

时间:2014-11-16 21:35:16

标签: java swing netbeans

我正在尝试创建一个JPanel,以便在用户点击我的主JFrame中的按钮时显示。在Netbeans中,我首先使用向导向我的项目添加新的JPanel,然后使用GUI创建者填写所有内容。我不是要使用以下代码显示JPanel

private void m_jbShowSelAccResultsActionPerformed(java.awt.event.ActionEvent evt)
{                                                      
    Account selAcc = getSelectedAccount();
    if(selAcc != null)
    {
        AccountView accPanel = new AccountView(Account.getDeepCopy(selAcc));
        accPanel.setVisible(true);
    }
    else
        ShowMessage("Please select an account to view");
}    

但没有任何反应,不会抛出任何错误,并且JPanel未显示。然后我将JPanel更改为JFrame(Netbeans没有抱怨)。当我使用相同的代码再次尝试时,我收到错误GroupLayout can only be used with one Container at a time

如何显示JPanel / JFrame

1 个答案:

答案 0 :(得分:2)

  1. 要在Swing GUI中更改视图,请使用CardLayout,因为这是一种更加强大和可靠的方法。
  2. 不要试图盲目地将JPanel更改为JFrame"。看起来你只是在这里猜测。
  3. GroupLayout无法在错误消息告诉您的情况下重复使用。可能这个错误来自上述观点。如果您避免尝试从JPanel中创建JFrame,则错误消息可能会消失。另外,GroupLayout不容易手动使用,特别是如果您尝试将组件添加到已渲染的GUI中。
  4. 例如,如果你的程序有一个名为cardHolderPanel的JPanel说,它使用了一个CardLayout,由一个名为cardLayout的变量保存,你已经添加了一张"卡"如果帐户名为setAccount(Accoint a),则可以通过调用CardLayout show(...)方法轻松交换视图,例如调用accPanel,如果accPanel有方法设置其当前显示的帐户:

    private void m_jbShowSelAccResultsActionPerformed(java.awt.event.ActionEvent evt) {                                                      
        Account selAcc = getSelectedAccount();
    
        if(selAcc != null) {
            accPanel.setAccount(Account.getDeepCopy(selAcc));
            cardLayout.show(cardHolderPanel, "Account View");
        }
        else {
            showErrorMessage("Please select an account to view");
        }
    }