2013-04-26 1 views
1

Я работаю с графическим интерфейсом на Java, и я сделал несколько JDialogs, открывающихся один над другим. Я попытался создать JTabbedPane, и у меня все получилось. Однако я должен сделать JTabbedPane в JFrame. Я пробовал, но JPanel открывает все пустое.Создание JTabbedPane в JDialog и создание фрейма

Во-вторых, когда я использую JFrame (так появился новый JTabbedPane), тот же кадр появляется за предыдущим.

Так что мои вопросы являются:

  • Как я могу создать с закладками в JDialog?
  • Как сделать JTabbedPane перед всеми остальными кадрами, если я использую JFrame?

Вот мой код, этот JFrame открывается, когда я нажимаю на JButton от предыдущего JDialog

public class AddComponents extends JDialog {  

    private String[] arr = {"House", "Microgrid", "CSP", "VPP"}; 

    public AddComponents(JDialog pai, String titulo) 
    { 
     super(pai, titulo); 
     frame = new JFrame(titulo); 

     // Display the window. 

     frame.setSize(500, 300); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // set grid layout for the frame 

     frame.getContentPane().setLayout(new GridLayout(1, 1)); 


     tabbedPane = new JTabbedPane(JTabbedPane.TOP); 
     pack(); 

     for (int i = 0; i < arr.length; i++) { 
      String tmp = arr[i]; 
      tabbedPane.addTab(tmp, makePanel(tmp)); 


     } 

     frame.getContentPane().add(tabbedPane); 
     frame.setMinimumSize(new Dimension(getWidth(), getHeight())); 
     frame.setLocation(pai.getX() + 85, pai.getY() + 25); 
     frame.setEnabled(true); 


    } 

    private JPanel makePanel(String text) { 
     JPanel p = new JPanel(); 
     //p.setLayout(new GridLayout(0,1)); 
     JPanel p1 = new JPanel(); 
     JPanel p2 = new JPanel(); 


     if(text.equals("House")) 
     { //CADA UM DOS ifs chama a class correspondente para criar o interface 
      p1.setLayout(new GridLayout(4, 2)); 

      idLabel = new JLabel("Component ID:"); 
      idText = new JTextField(""); 
      p1.add(idLabel); 
      p1.add(idText); 



      maxUsageLabel = new JLabel("Max usage per hour:"); 
      maxUsageText = new JTextField(""); 
      p1.add(maxUsageLabel); 
      p1.add(maxUsageText); 

      minUsageLabel = new JLabel("Min usage per hour:"); 
      minUsageText = new JTextField(""); 
      p1.add(minUsageLabel); 
      p1.add(minUsageText); 

      averageUsageLabel = new JLabel("Average usage per hour:"); 
      averageUsageText = new JTextField(""); 
      p1.add(averageUsageLabel); 
      p1.add(averageUsageText); 

     // emptyLabel = new JLabel(""); 
      saveButton = new JButton("Save"); 
     // p.add(emptyLabel); 
      p2.add(saveButton); 

      p.add(p1); 
      p.add(p2); 

     } 
     if(text.equals("Microgrid")) 
     { 
      p.setLayout(new GridLayout(5, 2)); 
      outroLabel = new JLabel(" Microgrid"); 
      p.add(outroLabel); 


     } 
     if(text.equals("VPP")) 
     { 
      p.setLayout(new GridLayout(5, 2)); 
      outroLabel = new JLabel(" VPP"); 
      p.add(outroLabel); 
     } 
     if(text.equals("CSP")) 
     { 
      p.setLayout(new GridLayout(5, 2)); 
      outroLabel = new JLabel(" CSP"); 
      p.add(outroLabel); 
     } 

     return p; 

    } 


} 

ответ

1

"How can I create the tabbed pane in a JDialog ?"

  • же, как если бы вы добавили его в JFrame. Здесь нет никакой разницы.

"How do I make the JTabbedPane appear in front of all other frames, if I use JFrame ?"

  • вы не знаете. Вы используете JDialog, если хотите отобразить окно над другими окнами.
+0

проблема в том, что если я использую JDialog, панель с вкладками отображается пустым. – SaintLike

+0

@EduardoRocha: тогда вы делаете что-то основное неправильно. Пожалуйста, покажите нам, как вы пытаетесь это сделать, предпочтительно в [sscce] (http://sscce.org), маленькой программе, которую мы можем скомпилировать и запустить, и которая показывает вашу проблему. –

+0

@EduardoRocha: Вы изменили макет по умолчанию для диалога? –

1

Для создания JDialog использования:

final JDialog dialog = new JDialog(); 
dialog.add(tabbedPane); 
dialog.setVisible(true); 

Java приложения обычно имеют только один JFrame, так что никто не беспокоится о Z-порядка. Если вам нравятся, вы можете использовать JInternalFrame. Вот tutorial. Однако вы можете использовать диалоги.

+0

спасибо, это очень помогло. Однако Z-порядок ошибочен, вкладка должна быть первой, и последняя – SaintLike