java - JFrame 不会显示在 netbeans 平台中

标签 java swing netbeans jframe netbeans-platform

我在 netbeans 项目扩展上构建了应用程序。我需要在 TopComponet 中单击按钮时显示新的分离的 Jframe。但是当我调用frame.setVisible(true) 时什么也没有发生。我尝试了方法 pack() 但没有帮助。

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。

最佳答案

好吧,我们在一个项目中遇到了 JFrame 和 TopComponent 耦合在一起的一些问题。 我试图提出其中一种方法。这可能会有所帮助。当您启动 Netbeans 平台应用程序时,它会创建一个默认的顶级组件(前提是您自己没有任何顶级组件)。我们想完全忽略默认的顶级组件,并提供我们自己的 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 有时可能会很麻烦。

关于java - JFrame 不会显示在 netbeans 平台中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767590/

相关文章:

javap说有一个main方法,java说我疯了

java - 如何在 Java 中堆叠/覆盖 jPanel?

java - 只允许在 JTextField 中输入数字和符号 (-)

java - 有什么方法可以让我的 JFrame 居中吗?

java - 需要字符串缓冲区帮助

java - 在 java 中获取变量值的问题。变量的范围

java - 从 Java 服务器向 Android 推送数据

java - 比较java中格式的 double 值?

java - 如何从泛型列表转换为 Java 8 中的对象列表?

java - 如何设置字体的颜色?