2014-12-07 59 views
7

Đây là phần GUI ứng dụng java của tôi mà tôi có câu hỏi.Làm thế nào để loại bỏ các đệm giữa trong JPanel vẫn còn sử dụng một bố trí dòng chảy?

enter image description here

gì GUI này bao gồm là một JPanel xanh (container) với mặc định FlowLayout như LayoutManager có chứa một hộp chứa hai JPanels (để xóa khoảng cách ngang hoặc tôi có thể đã sử dụng setHgaps để không cho rằng vấn đề thay vì một Box) mỗi cái chứa một JLabel.

Đây là mã của tôi để tạo phần đó của GUI.

private void setupSouth() { 

    final JPanel southPanel = new JPanel(); 
    southPanel.setBackground(Color.BLUE); 

    final JPanel innerPanel1 = new JPanel(); 
    innerPanel1.setBackground(Color.ORANGE); 
    innerPanel1.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT)); 
    innerPanel1.add(new JLabel("Good")); 

    final JPanel innerPanel2 = new JPanel(); 
    innerPanel2.setBackground(Color.RED); 
    innerPanel2.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT)); 
    innerPanel2.add(new JLabel("Luck!")); 

    final Box southBox = new Box(BoxLayout.LINE_AXIS); 
    southBox.add(innerPanel1); 
    southBox.add(innerPanel2); 

    myFrame.add(southPanel, BorderLayout.SOUTH); 
} 

Câu hỏi của tôi là làm cách nào để thoát khỏi vùng đệm dọc giữa JPanel bên ngoài (ô màu xanh lam) và Hộp?

Tôi biết điều này là đệm vì tôi đọc trên Difference between margin and padding? rằng "đệm = khoảng trống xung quanh (bên trong) phần tử từ văn bản đến đường viền".

Điều này sẽ không làm việc vì điều này đã sinh nở với khoảng trống (space) giữa components.- How to remove JPanel padding in MigLayout?

tôi đã cố gắng này, nhưng nó đã không làm việc một trong hai. JPanel Padding in Java

+0

mã của bạn chưa hoàn tất.Bạn không bao giờ thêm southBox vào bảng điều khiển của bạn cũng như bạn thêm các innerPanels của bạn vào bảng điều khiển phía nam của bạn –

Trả lời

11

Bạn có thể chỉ set the gaps trong FlowLayout, ví dụ:

FlowLayout layout = (FlowLayout)southPanel.getLayout(); 
layout.setVgap(0); 

Giá trị mặc định FlowLayout có 5 đơn vị khoảng cách ngang và dọc. Ngang không quan trọng trong trường hợp này là BorderLayout đang kéo dài bảng điều khiển theo chiều ngang.

Hoặc đơn giản khởi tạo bảng điều khiển bằng FlowLayout mới. Nó sẽ là kết quả tương tự.

new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); 

Edit:

"Tôi cố gắng đó, đã không làm việc .."

trình đối với tôi ...

enter image description here       enter image description here

        Thiết lập khoảng cách ↑                         Không đặt khoảng cách ↑

import java.awt.*; 
import javax.swing.*; 

public class Test { 

    public void init() { 
     final JPanel southPanel = new JPanel(); 
     FlowLayout layout = (FlowLayout)southPanel.getLayout(); 
     layout.setVgap(0); 
     southPanel.setBackground(Color.BLUE); 

     final JPanel innerPanel1 = new JPanel(); 
     innerPanel1.setBackground(Color.ORANGE); 
     innerPanel1.add(new JLabel("Good")); 

     final JPanel innerPanel2 = new JPanel(); 
     innerPanel2.setBackground(Color.RED); 
     innerPanel2.add(new JLabel("Luck!")); 

     final Box southBox = new Box(BoxLayout.LINE_AXIS); 
     southBox.add(innerPanel1); 
     southBox.add(innerPanel2); 

     southPanel.add(southBox); // <=== You're also missing this 

     JFrame myFrame = new JFrame(); 
     JPanel center = new JPanel(); 
     center.setBackground(Color.yellow); 
     myFrame.add(center); 
     myFrame.add(southPanel, BorderLayout.SOUTH); 
     myFrame.setSize(150, 100); 
     myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     myFrame.setLocationByPlatform(true); 
     myFrame.setVisible(true); 
    } 

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

Lưu ý: Luôn luôn gửi một ví dụ Runnable (như I have done) cho tốt hơn Cứu giúp. Bạn nói nó không hoạt động, nhưng nó luôn luôn làm việc cho tôi, vậy làm thế nào chúng ta sẽ biết những gì bạn đang làm sai mà không có một số mã sẽ chạy và chứng minh vấn đề?

+0

Tôi đã thử điều đó, không hoạt động vì khoảng trống giữa các thành phần – committedandroider

+0

Vui lòng đăng một ví dụ chạy được để giải thích vấn đề này –

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