2013-04-27 33 views
5

Tôi đã tạo ứng dụng đơn giản với Bố cục viền và thêm vào hai nút và JTable. Tôi sử dụng JSplitPane giữa button2 và JTable. Tôi muốn xác định lại kích thước mặc định của khối ở vị trí button1. Làm thế nào tôi có thể giải quyết nhiệm vụ này?Không thể thay đổi kích thước của khối trong BorderLayout

Đây là mã của tôi:

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 ay bạn vui lòng nêu rõ hơn một chút về nhu cầu của bạn, để ai đó trả lời bạn trên những dòng này :-) Hình ảnh chính xác những gì bạn muốn, một phác thảo thô, là tất cả những gì cần thiết để tạo ra ý tưởng, để hiểu được nhu cầu của câu hỏi. +1 cho SSCCE –

Trả lời

4

Nếu bạn sẵn sàng để sử dụng GridBagLayout với mục đích nói, sau đó tôi đoán đây Layout và làm công việc này cho bạn, như đã nêu trong ví dụ mã bên dưới dán :-)

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

Dưới đây là sản phẩm của cùng:

GRIDBAGEXAMPLE

+0

Great.Big cảm ơn. – veinhorn

6

Components ở vị trí BorderLayout.PAGE_START có chiều cao của kích thước ưa thích của họ được tôn trọng. Do đó, bạn có thể ghi đè lên kích thước ưa thích của JButtonbut1

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

thx. Xin lỗi tôi đã phạm lỗi trong tiêu đề. Nhưng tôi có thể thay đổi kích thước mặc định của BorderLayout.NORTH không? – veinhorn

+0

Tôi đã cố gắng sử dụng giải pháp này, nhưng nó không hoạt động. – veinhorn

+0

Điều chỉnh thông số chiều cao để bạn thấy sự khác biệt đáng kể về kích thước mặc định và đã sửa đổi. Xem cập nhật nhỏ – Reimeus

Các vấn đề liên quan