JFrame不会在netbeans平台上展示

时间:2015-01-04 16:21:06

标签: java swing netbeans jframe netbeans-platform

我在netbeans项目扩展上有应用程序构建。我需要在TopComponet中单击按钮时显示新的分隔Jframe。但是当我调用frame.setVisible(true)时,没有任何反应。我尝试了方法包(),它没有帮助。

public void onClick(){
   MyFrame frame = new MyFrame();
   frame.pack();
   frame.setVisible(true);
}

我已经读过一些人有同样的问题,但我找不到任何解决方案。

MyFrame类

public class MyFrame extends javax.swing.JFrame {
public MyFrame() {
    initComponents();
}

private void initComponents() {    
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 400, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 300, Short.MAX_VALUE)
    );

    pack();
}            
}

编辑:

javax.swing.JFrame t = new javax.swing.JFrame("test");
t.pack();
t.setVisible(true);
//works

MyFrame t = new MyFrame();
t.pack();
t.setVisible(true);
//doesnt work

UserDetailWindowFrame是由Netbeans创建的JFrame。

4 个答案:

答案 0 :(得分:1)

好的,我们在一个项目中遇到了JFrame和TopComponent耦合在一起的一些问题。 我试图建议其中一种方法。它可能在某种程度上有所帮助。当您启动Netbeans Platform应用程序时,它会创建一个默认的Topcomponent,前提是您没有自己的任何Topcomponent。我们想要一起忽略默认的Top Component,并提供我们自己的JFrame。

当应用程序启动时,我们在配置文件中提供了以下参数(我们的一个是netbeans maven项目) -

default_options="-J-Dorg.netbeans.core.WindowSystem.show=false"

加载模块后,我们在以下代码块中启动了自定义JFrame -

WindowManager.getDefault().invokeWhenUIReady(new Runnable(){    
@Override
public void run(){
MainJFrame parentJFrame = new MainJFrame("");
parentJFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
parentJFrame.add(myJPanel);// your JPanel will come here
parentJFrame .revalidate();
parentJFrame .repaint();
parentJFrame .setVisible(true);
 }
 });    

如果您总是在同一个TopComponent中工作,那么您可能希望在显示自己的JFrame之前关闭/隐藏TopComponent。以下代码可能有所帮助 -

 WindowManager.getDefault().getMainWindow().setVisible(false);
                            or
 WindowManager.getDefault().getMainWindow().setEnabled(false);

希望这有帮助。在Netbeans平台中使用JFrame应用程序有时会很讨厌。

答案 1 :(得分:0)

我开始创建一个新的空框架。

public void onClick()
{
    MyFrame newframe = new MyFrame();
    newframe.setDefaultCloseOperation(1); //adding this will allow the new frames to close without the application closing
    newframe.setVisible(true);
    newframe.pack();
}

但是如果你关闭它,它将退出应用程序,你可能想要考虑构建一个特定的新框架。

答案 2 :(得分:0)

您可以在JFrame上设置大小并将其定位到中心( frame.setLocationRelativeTo(null))并查看它是否有效。以下是相关代码:

private void initComponents() {    
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0, 300, Short.MAX_VALUE)
);

setSize(1000, 1000);
//pack(); no need to call this as we set a fixed size

}

像这样调用你的onClick方法:

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         

       onClick();

    }  

这是onClick方法:

public void onClick(){
   MyFrame frame = new MyFrame();
   //frame.pack(); no need to call this as we set a fixed size
   frame.setLocationRelativeTo(null); // position it to the center
   frame.setVisible(true);
}

答案 3 :(得分:0)

在创建Class MyFrame的对象后使用方法.show(),所以看起来应该更像是这样:

public void onClick(){
    MyFrame frame = new MyFrame();
    frame.pack();
    frame.show(); //it may create the frame at the top left corner.
}