2016-09-23 3 views
0

Ich arbeite gerade an einem digitalen Schulplaner und möchte mehrere JButtons in einem JTabbedPane verwenden. Aber ich habe gerade ein Problem, bei dem sogar ein Knopf den gesamten Bereich einnimmt und eine Lösung dafür suchen möchte.Jbutton Positionieren in einem Registerkartenfenster

ich ein Testprogramm erstellt haben, die Spiegel, wie ich mein Hauptprogramm am Codierung:

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

    } 
} 

ich versucht habe BorderLayout.POSITION verwenden und es aufgespannt auf Fehler nach Fehler jede alternative Lösung wäre toll :)

Antwort

0

Ihr TabbedPane kann nur ein "Objekt" enthalten. Wenn Sie eine Schaltfläche hinzufügen, ist Ihr Bereich voll. Sie können jedoch einen Container mit mehr Platz für das Fenster hinzufügen. Zum Beispiel ein JPanel. Der JPanel kann nun beliebig viele "Objekte" aufnehmen und kann seinen eigenen LayoutManager verwenden.

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

Auch Sie crete und initialisieren Sie Ihre gesamte GUI im Konstruktor. Es könnte sauberer sein, eine zweite Methode wie initializeGUI() zu definieren, um die Erstellung des Objekts und die Initialisierung Ihrer GUI zu trennen. Auch sollten Sie den GUI-Thread und den Main-Thread zu trennen, von invokeLater

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

Verwendung Es besteht keine Notwendigkeit JFrame ist zu erweitern und eine separate JFrame in Ihrem JFrame zu erstellen. Entfernen Sie die extends JFrame oder die Erstellung Ihres JFrame innerhalb der Klasse. Sie können auf die JFrame Mehtodes innerhalb Ihrer erweiterten Klasse zugreifen.

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

danke für die Hilfe. Wie würde ich diesen JButtons einen Aktionslistener hinzufügen? –

0

einen anderen Container wie JPanel in Ihrem JTabbedPane wie folgt hinzufügen:

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

Fügen Sie alle Ihre Komponenten an die JPanel, die Sie auf den Registerkarten angezeigt werden sollen.

Verwandte Themen