2013-04-27 12 views
5

Ich habe eine einfache App mit Border Layout erstellt und zwei Schaltflächen und JTable hinzugefügt. Ich verwende JSplitPane zwischen button2 und JTable. Ich möchte die Standardgröße des Blocks neu definieren, wo sich Button1 befindet. Wie kann ich diese Aufgabe lösen?Blockgröße kann in BorderLayout nicht geändert werden

Hier ist mein Code:

package test; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSplitPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class Sample { 

    public Sample() { 
     JFrame app = new JFrame("Sample"); 
     app.setSize(new Dimension(800,600)); 

     JPanel panel = new JPanel(); 
     app.add(panel); 

     BorderLayout borderlayout = new BorderLayout(); 
     panel.setLayout(borderlayout); 

     JButton but1 = new JButton("1"); 
     JButton but2 = new JButton("2"); 
     but2.setMinimumSize(new Dimension(250,0)); 
     String[] colNames = {"Name","Number","Scores"}; 
     Object[][] data = { 
       { "Mark",11,12}, 
       {"Tommy",23,34}, 
       {"John",34,45} 
     }; 
     JTable table = new JTable(data, colNames); 

     JScrollPane scrollpane = new JScrollPane(table); 
     JSplitPane jsplitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,but2,scrollpane); 

     panel.add(but1,BorderLayout.NORTH); 
     panel.add(jsplitpane,BorderLayout.CENTER); 

     app.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new Sample(); 
      } 
     }); 
    } 
} 

enter image description here

+0

M Sie geben bitte etwas mehr für Ihre Bedürfnisse an, damit Ihnen jemand in diesen Zeilen antworten kann :-) Ein Bild von genau dem, was Sie wollen, eine grobe Skizze, ist alles, was benötigt wird, um eine Idee zu machen, welcher Linie man folgen muss um die Notwendigkeit der Frage zu verstehen. +1 für SSCCE –

Antwort

4

außer Kraft setzen Wenn Sie bereit sind GridBagLayout für den genannten Zweck zu verwenden, dann denke ich, diese Layout und diesen Job für Sie tun, wie in der unten eingefügten Codebeispiel angegeben :-)

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Dimension; 
import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSplitPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class Sample { 

    public Sample() { 
     JFrame app = new JFrame("Sample"); 
     app.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     app.setSize(new Dimension(800,600)); 

     JPanel panel = new JPanel(); 
     panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     panel.setLayout(new BorderLayout(5, 5)); 
     JPanel centerPanel = new JPanel(); 
     centerPanel.setLayout(new GridBagLayout());   

     JButton but1 = new JButton("1"); 
     JButton but2 = new JButton("2"); 
     but2.setMinimumSize(new Dimension(250,0)); 
     String[] colNames = {"Name","Number","Scores"}; 
     Object[][] data = { 
       { "Mark",11,12}, 
       {"Tommy",23,34}, 
       {"John",34,45} 
     }; 
     JTable table = new JTable(data, colNames); 

     JScrollPane scrollpane = new JScrollPane(table); 
     JSplitPane jsplitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,but2,scrollpane); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.weightx = 1.0; 
     gbc.weighty = 0.3; 

     centerPanel.add(but1, gbc);   

     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridy = 1; 
     gbc.weighty = 0.7; 

     centerPanel.add(jsplitpane, gbc); 

     panel.add(centerPanel, BorderLayout.CENTER); 

     app.add(panel); 
     app.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new Sample(); 
      } 
     }); 
    } 
} 

Hier ist die Ausgabe des gleichen:

GRIDBAGEXAMPLE

+0

Great.Big thanks setzen. – veinhorn

6

Komponenten in der BorderLayout.PAGE_START Lage haben die Höhe ihrer bevorzugten Größen geachtet. Daher können Sie die bevorzugte Größe von JButtonbut1

JButton but1 = new JButton("1") { 
    public Dimension getPreferredSize() { 
     return new Dimension(100, 80); 
    }; 
}; 
+0

thx. Sorry, ich habe einen Fehler im Titel gemacht. Aber kann ich die Standardgröße von BorderLayout.NORTH ändern? – veinhorn

+0

Ich habe versucht, diese Lösung zu verwenden, aber es funktioniert nicht. – veinhorn

+0

Passen Sie den Höhenparameter so an, dass Sie einen deutlichen Unterschied zwischen den Standardgrößen und den geänderten Größen sehen. Siehe kleinere Aktualisierung – Reimeus