Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否显示JFrame作为JButton单击的结果?_Java_Swing_Netbeans - Fatal编程技术网

Java 是否显示JFrame作为JButton单击的结果?

Java 是否显示JFrame作为JButton单击的结果?,java,swing,netbeans,Java,Swing,Netbeans,我正在尝试创建一个JPanel,当用户单击我的主JFrame中的按钮时显示。在Netbeans中,我首先使用向导向我的项目中添加一个新的JPanel,然后使用GUI创建者填充所有内容。我没有试图用以下代码显示JPanel private void m_jbShowSelAccResultsActionPerformed(java.awt.event.ActionEvent evt) {

我正在尝试创建一个
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一次只能与一个容器一起使用

如何显示我的
JPanel
/
JFrame

  • 要在Swing GUI中更改视图,请使用,因为这是一种更加健壮和可靠的方法
  • 不要盲目地“将JPanel更改为JFrame”。看起来你只是在猜
  • 无法重用GroupLayout,因为错误消息告诉您。这个错误很可能来自上面这一点。如果您避免尝试从JPanel生成JFrame,那么错误消息可能会消失。另一方面,GroupLayout不容易手动使用,特别是当您试图向已经呈现的GUI添加组件时 例如,如果您的程序有一个JPanel,比如称为CardPanel,它使用一个CardLayout,它由一个变量(比如称为CardLayout)保存,并且您已经将一个“卡”JPanel添加到这个帐户的持有者,比如说称为accPanel,如果accPanel有一个方法来设置其当前显示的帐户,比如说
    setAccount(Accoint a)
    ,您可以通过调用CardLayout
    show(…)
    方法轻松交换视图,例如:

    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");
        }
    }