2015-01-04 3 views
0

У меня есть приложение, основанное на расширении проекта netbeans. Мне нужно показать новый выделенный Jframe при нажатии кнопки в TopComponet. Но когда я вызываю frame.setVisible (true), ничего не происходит. Я пробовал метод pack(), и это не помогает.JFrame не отображается в платформе netbeans

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 является фрейму genereted от Netbeans.

+0

как вы называете метод onClick()? – ZakiMak

+0

button.addMouseListener (новый java.awt.event.MouseAdapter() {.... – SpeedEX505

+0

нормально с этим, MyFrame - это имя вашего созданного gui класса для вашего приложения, если вы просто создаете новый экземпляр своего класса если вы закрываете приложение, то он выйдет из приложения. Почему вам нужен второй кадр? –

ответ

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

Однако, если вы закроете его, он выйдет из приложения, возможно, вам захочется подумать о создании конкретного нового кадра.

+0

Я не понимаю, что вы пытаетесь сказать. – SpeedEX505

+0

За одну секунду вы используете Java gui builder. –

+0

Да, я знаю. Проверьте мое редактирование – SpeedEX505

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); 
} 
+0

проверить мое редактирование .... – SpeedEX505

+0

Вы могли бы поделиться бит вашего кода для UserDetailWindowFrame? – ZakiMak

+0

Я сделал. Его просто автогенерированный JFrame от netbeans – SpeedEX505

1

Хорошо, мы столкнулись некоторые проблемы с JFrame и TopComponent связаны вместе в одном из наших проектов. Я пытаюсь предложить один из подходов. Это может быть полезно. Когда вы начинаете приложение платформы Netbeans, оно создает Defaultcomponent по умолчанию, если у вас нет собственного собственного компонента Topcomponent. Мы хотели проигнорировать стандартный компонент по умолчанию и предоставить собственный JFrame.

Когда приложение начинало мы представили следующий аргумент в конфигурационном файле (наш один является NetBeans Maven Project) -

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, то вы можете закрыть/скрыть TopComponent, прежде чем показывать свой собственный JFrame.The следующий код может Помощь-

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

Надеюсь, это поможет. Использование JFrame внутри платформы Netbeans Applicaiton иногда бывает неприятным.

0

Используйте метод.show() после создания объекта класса MyFrame, так что это должно выглядеть примерно так:

public void onClick(){ 
    MyFrame frame = new MyFrame(); 
    frame.pack(); 
    frame.show(); //it may create the frame at the top left corner. 
} 
Смежные вопросы