2016-09-23 2 views
0

В настоящее время я работаю над созданием цифрового школьного планировщика и хочу использовать несколько JButtons внутри JTabbedPane. Но в настоящее время у меня проблема, когда даже одна кнопка занимает всю панель и хотела бы решить это.Расположение Jbutton внутри панели с вкладками

Я создал тестовую программу, которая отражает как я кодирования свою основную программу:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTabbedPane; 

public class tabTest extends JFrame { 
    private static final long serialVersionUID = 5101892517858668104L; 
    private JFrame frame; 
    private int WIDTH = 450; 
    private int HEIGHT = 600; 

    private JTabbedPane tab; 

    public tabTest() { 

     frame = new JFrame(); 
     // frame.setUndecorated(true); 
     /**************************************************** 
     * Set up frame 
     *****************************************************/ 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(WIDTH, HEIGHT); 
     frame.setLocation(50, 50); 
     frame.getContentPane().setBackground(Color.GRAY); 
     frame.getContentPane().setLayout(null); 

     /****************************************************** 
     * Set up Tabbed pane and buttons 
     ******************************************************/ 
     tab = new JTabbedPane(); 
     tab.setBounds(20, 50, 400, 500); 
     tab.setBackground(Color.white); 
     tab.setFocusable(false); 

     JButton tabButton1 = new JButton("test"); 

     tab.addTab("Week 1", tabButton1); 
     tab.addTab("Week 2", null); 
     tab.addTab("Week 3", null); 
     tab.addTab("Week 4", null); 
     frame.getContentPane().add(tab); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 

     new tabTest(); 

    } 
} 

я попытался с помощью BorderLayout.POSITION и швырнул вверх ошибки после ошибки любое альтернативное решение было бы здорово :)

ответ

0

Ваша вкладка может содержать только один «объект». Если вы добавите кнопку, ваша панель будет заполнена. Однако вы можете добавить контейнер с большим количеством места в панель. Например, JPanel. JPanel теперь может содержать столько «объектов», сколько вы хотите, и можете использовать собственный LayoutManager.

JPanel moreButtons = new JPanel(); 
moreButtons.add(new JButton("test1")); 
moreButtons.add(new JButton("test2")); 
moreButtons.add(new JButton("test3")); 
moreButtons.add(new JButton("test4")); 

tab.addTab("Week 1", moreButtons); 

Также вы создаете и инициализируете весь графический интерфейс внутри конструктора. Возможно, было бы проще определить второй метод, например initializeGUI(), чтобы отделить создание объекта и инициализацию вашего графического интерфейса. Кроме того, вы должны отделить GUI-нить и Main-нить, с помощью invokeLater

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
    Gui g = new Gui(); 
    g.initalizeGUI(); 
    Gui.setVisible(true); 
    } 
    }); 
} 

Там нет необходимости расширять JFrame и создать отдельную JFrame внутри вашего JFrame. Удалите extends JFrame или создайте свой JFrame внутри класса. Вы можете получить доступ к mehtodes JFrame из своего расширенного класса.

public class MyFrame extends JFrame { 

public MyFrame() { 
    /** 
    * Set up frame 
    */ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(WIDTH, HEIGHT); 
    setLocation(50, 50); 
    getContentPane().setBackground(Color.GRAY); 
    getContentPane().setLayout(null); 
} 
} 
+0

благодарит за помощь. как я могу добавить прослушиватель действий к этим JButtons? –

0

Добавить другой контейнер, как JPanel внутри вашей JTabbedPane так:

JPanel panel = new JPanel(); 
    panel.setLayout(new FlowLayout()); // you can change layout according to your need. 
    p.add(tabButton1); 
    tab.addTab("Week 1", panel); 
    tab.addTab("Week 2", null); 
    tab.addTab("Week 3", null); 
    tab.addTab("Week 4", null); 

Добавить все компоненты в JPanel, которые вы хотите показать на вкладках.

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