【问题标题】:JFrame wont show in netbeans platformJFrame 不会在 netbeans 平台中显示
【发布时间】:2015-01-04 16:21:05
【问题描述】:

我在 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。

【问题讨论】:

  • 你是怎么调用onClick()方法的?
  • button.addMouseListener(new java.awt.event.MouseAdapter(){....
  • 好吧,问题是,MyFrame 是您为您的应用程序创建的 gui 类的名称,如果您只是创建一个新的类实例,如果您关闭一个实例,它将退出应用程序。为什么需要第二帧?
  • MyJFrame 不是应用程序的主 JFrame。应用程序是 netbeans 平台扩展。我需要在始终位于顶部的非模态窗口中单击按钮后显示一些内容。

标签: java swing netbeans jframe netbeans-platform


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我得到这个工作来创建一个新的空框架。

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

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

    【讨论】:

    • 我不明白你想说什么。
    • 一秒钟你就可以使用 Java gui builder。
    【解决方案3】:

    您能否在 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);
    }
    

    【讨论】:

    • 你能分享一些你的 UserDetailWindowFrame 代码吗?
    • 我做到了。它只是由 netbeans 自动生成的 JFrame
    • 请检查我的回答。
    • 我编辑了类,但无论如何都没有显示 JFrame。课程被编辑有问题
    • 好的,也许如果你设置大小它会显示。检查更新的答案。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      相关资源
      最近更新 更多