2013-03-04 3 views
0

Я понял понятия, стоящие за JTabbedPane и GridBagLayout. Однако, когда я пытаюсь использовать оба вместе, я терплю неудачу. То есть, когда я использую GBLayout, мои другие вкладки (каждая вкладка имеет разную функциональность) не отображаются. Пожалуйста помоги. Спасибо.JTabbedPane с GridBagLayout

Вот мой код:

import java.awt.*; 
    import javax.swing.*; 

    public class Tryout extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private  JTabbedPane tabbedPane; 
    private  JPanel  panel1; 
    private  JPanel  breakfast; 

    public Tryout() 
    { 
     JPanel topPanel = new JPanel(); 
     topPanel.setLayout(new BorderLayout()); 
     getContentPane().add(topPanel); 

     createPage1(); //Tab1 
     createPage2(); //Tab2 

     tabbedPane = new JTabbedPane(); 
     tabbedPane.addTab("Input Form", panel1); 
     tabbedPane.addTab("Breakfast", breakfast); 
     topPanel.add(tabbedPane, BorderLayout.CENTER); 
    } 

    public void createPage1() 
    { 
     /* Works fine when I un-comment this 
     panel1 = new JPanel(); 
     panel1.setLayout(new BorderLayout()); 
     panel1.add(new JLabel("Hi"), BorderLayout.NORTH); 
     */ 
     //Tabs not getting displayed if I add the code below with GBLayout 
     JPanel panel = new JPanel(new GridBagLayout()); 
     this.getContentPane().add(panel); 

     JLabel label = new JLabel("Form"); 

     JPanel tableButtonPanel = new JPanel(); 
     tableButtonPanel.add(new JButton("Add Thing")); 
     tableButtonPanel.add(new JRadioButton("Delete Thing")); 
     tableButtonPanel.add(new JButton("Modify Thing")); 

     GridBagConstraints gbc = new GridBagConstraints(); 

     gbc.gridx = 0; 
     gbc.gridy = 0; 
     panel.add(label, gbc); 

     gbc.gridx = 0; 
     gbc.gridy = 2; 
     panel.add(tableButtonPanel, gbc); 

    } 

    public void createPage2() 
    { 
     breakfast = new JPanel(); 
     breakfast.setLayout(new BorderLayout()); 
     breakfast.add(new JButton("North"), BorderLayout.NORTH); 
     breakfast.add(new JButton("South"), BorderLayout.SOUTH); 
     breakfast.add(new JButton("East"), BorderLayout.EAST); 
     breakfast.add(new JButton("West"), BorderLayout.WEST); 
     breakfast.add(new JButton("Center"), BorderLayout.CENTER); 
    } 

public static void main(String args[]) { 

     Tryout ex = new Tryout(); 
     ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     ex.setSize(750,750); 
     ex.setVisible(true); 
     ex.setTitle("Recipe Tracker"); 
     ex.setBackground(Color.gray); 

    } 
} 

ответ

3

Проблема заключается в том, что в createPage1, вы добавляете новый JPanel к JFrame:

this.getContentPane().add(panel); 

, который вытесняет topPanel (который содержит JTabbedPane) который находится в позиции JFrameBorderLayout.CENTER. Поэтому не появляется JTabbedPane.

Вы могли бы просто возвращение нового JPanel, которая была создана и добавить его в свой JTabbedPane:

public JPanel createPage1() { 

    JPanel panel = new JPanel(new GridBagLayout()); 
    // this.getContentPane().add(panel); don't do this... 
    ... 

    return panel; 
} 

и добавить:

tabbedPane.addTab("Input Form", createPage1()); 
+0

выручал меня. Большое спасибо. Однако сейчас у меня мало других проблем. – trollster

Смежные вопросы