我在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。
答案 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.
}