2013-04-27 21 views
5

'daki blok büyüklüğünü değiştiremiyor Kenarlık Düzeni ile basit bir uygulama oluşturdum ve ona iki düğme ve JTable ekledim. JSplitPane'i button2 ve JTable arasında kullanıyorum. Button1'in bulunduğu varsayılan blok boyutunu yeniden tanımlamak istiyorum. Bu görevi nasıl çözebilirim? BorderLayout.PAGE_START konumdaBorderLayout

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 Biri ihtiyaçlarınızla ilgili biraz daha belirtiniz, birileri size bu satırlarda cevap vermesi için :-) Tam olarak istediğiniz bir görüntü, kaba bir taslak, bir fikrin yapılması için gereken her şey, hangisinin takip etmesi gerektiği Sorunun gereklerini anlamak. SSCCE –

cevap

4

tercih boyutunu geçersiz kılabilir aşağıda yapıştırılan kod örneğinde belirtildiği gibi, o zaman ben, bu Layout tahmin ve sizin için bu işi yapmak :-) Burada

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

aynı çıktısı:

GRIDBAGEXAMPLE

+0

Great.Big yüksekliğini ayarlayabiliyorsunuz. – veinhorn

6

Bileşenleri saygı tercih ettikleri boyutların yüksekliğine sahiptir:

İşte benim kodudur. Eğer böyle bir amaca yönelik GridBagLayout kullanmak isteyen varsa nedenle, JButtonbut1

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

thx için +1. Üzgünüm başlığında hata yaptım. Ancak, BorderLayout.NORTH varsayılan boyutunu değiştirebilir miyim? – veinhorn

+0

Bu çözümü kullanmaya çalıştım ama işe yaramıyor. – veinhorn

+0

Yükseklik parametresini, varsayılan ve değiştirilmiş boyutlarda kayda değer bir fark görebilmeniz için ayarlayın. Küçük güncellemeye bakın – Reimeus

İlgili konular