2011-01-12 28 views
5

Làm cách nào để bạn xóa/giảm khoảng cách giữa các hộp kiểm với MigLayout ?Swing: khoảng cách hộp kiểm so với nhãn

alt text

import java.util.Arrays; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import net.miginfocom.swing.MigLayout; 

public class CheckboxSpacing { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("checkbox spacing"); 
     JPanel panel = new JPanel(); 
     frame.setContentPane(panel); 
     panel.setLayout(new MigLayout()); 
     for (String verb : Arrays.asList("see","hear","speak")) 
     { 
      JCheckBox cb = new JCheckBox(verb+" no evil"); 
      panel.add(cb, "wrap"); 
     } 

     frame.pack(); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

LƯU Ý: Tôi đang tự hỏi có lẽ nếu phần MigLayout của câu hỏi này là một cá trích đỏ. Nếu tôi thay đổi chương trình của tôi đến sau, tôi nhận được những đoạn hội thoại:

alt textalt text

Bạn sẽ lưu ý sự khác biệt về khoảng cách giữa các nhãn và hộp kiểm. Làm thế nào tôi có thể loại bỏ khoảng cách thừa cho các hộp kiểm?

import java.awt.Component; 
import java.util.Arrays; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import net.miginfocom.swing.MigLayout; 

public class CheckboxSpacing { 
    enum WhichGUI { LABEL { 
     @Override 
     public Component createComponent(String text) { 
      return new JLabel(text); 
     } 
    }, CHECKBOX { 
     @Override 
     public Component createComponent(String text) { 
      return new JCheckBox(text); 
     } 
    }; 
     abstract public Component createComponent(String text); 
    } 
    public static void main(String[] args) { 
     doit(WhichGUI.LABEL); 
     doit(WhichGUI.CHECKBOX); 
    } 
    private static void doit(WhichGUI which) { 
     JFrame frame = new JFrame("spacing: "+which); 
     JPanel panel = new JPanel(); 
     frame.setContentPane(panel); 
     panel.setLayout(new MigLayout(
        "", //layout 
        "[]", //column 
        "0" //row 
      )); 
     for (String verb : Arrays.asList("see","hear","speak")) 
     { 
      Component c = which.createComponent(
         verb+" no evil (Jabberwocky! Çgpq)"); 
      panel.add(c, "wrap 0"); 
     } 

     frame.pack(); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

Trả lời

5

Sự khác biệt là ở kích thước ưa thích của .. mỗi thành phần

String text = "Hear no evil"; 
JLabel label = new JLabel(text); 
System.out.println(label.getPreferredSize()); 
System.out.println(label.getInsets()); 

JCheckBox checkBox = new JCheckBox(text); 
System.out.println(checkBox.getPreferredSize()); 
System.out.println(checkBox.getInsets()); 

Một hộp kiểm có khác không insets Đây sẽ là từ biên giới Vì vậy, bạn sẽ có thể một trong hai:.

  1. thiết lập các biên giới của hộp kiểm tra null
  2. thêm một EmptyBorder nhãn
+1

cảm ơn! Cuối cùng tôi đã có thời gian để thử nó, và thiết lập các hộp kiểm để null giảm không gian trống rỗng. Có vẻ như bạn cần một không gian nhỏ để hình chữ nhật lấy nét hiển thị đúng cách, vì vậy tôi đã làm 'cb.setBorder (new EmptyBorder (Insets mới (1,1,1,1));' và đó dường như là một thỏa hiệp tốt đẹp . –

1

Có một số cách để thực hiện việc này và chúng được chỉ định rõ trong this document.

Bạn có thể chỉ định khoảng cách giữa lưới hoặc các thành phần. Bạn có thể muốn làm điều gì đó như thế này:

 new MigLayout(
       "", //layout 
       "[]", //column 
       "5" //row 
     ); 

Và điều đó nên đặt khoảng trống. Bạn sẽ phải chơi với những con số cho đến khi bạn có được những gì bạn muốn.

Một lựa chọn thứ hai (và tôi nghĩ rằng bạn có nhiều kiểm soát theo cách này là để làm điều này:.

panel.add(cb, "wrap 0"); 

Trường hợp 0 ​​xác định khoảng cách giữa các hàng

+0

Nó vẫn không hoạt động. Có lẽ nó không phải là một điều miglayout, có lẽ nó là một hộp kiểm điều thay vì: nếu tôi sử dụng đề xuất của bạn để tăng khoảng cách hàng đến 100, tôi nhận được khoảng cách nhiều hơn nữa. Nhưng nếu tôi thay đổi khoảng cách hàng thành 0, tôi nhận được nhiều hơn hoặc ít hơn những gì tôi bắt đầu với, và có thêm khoảng cách tôi không muốn. –

+0

Nếu tôi sử dụng "wrap -3" thì nó trông có vẻ đúng, nhưng có điều gì đó đáng sợ về việc sử dụng một số nhỏ hơn 0. –

+0

@Jason S Bạn có thể muốn xem xét khoảng cách thành phần sau đó. Bạn có một số tùy chọn như gaptop, gapleft vv để xác định cách xa thành phần cách xa mép. –

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