2012-05-08 30 views
6

Tôi có JTextField và tôi muốn setMargin. Nhưng khi tôi thiết lập bất kỳ biên giới, nó không hoạt động đúng cách. Chức năng lề của nó không hoạt động. Đây là mã của tôi;Lợi nhuận JTextField không hoạt động với đường biên

import java.awt.Color; 
import java.awt.Insets; 
import java.io.IOException; 

import javax.swing.BorderFactory; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 

public class ImageField { 

public static void main(String[] args) throws IOException { 

    JTextField textField = new JTextField(); 
    textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); 
    textField.setMargin(new Insets(0, 20, 0, 0)); 
    JOptionPane.showMessageDialog(null, textField, "", 
      JOptionPane.PLAIN_MESSAGE); 
    } 
} 

Nếu tôi commant dòng này, nó hoạt động

//textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); 
+0

Tôi yêu thingy Compound Border này, khi nói đến thiết lập các biên giới, vì bạn có thể chỉ định một Border rỗng với nó và nó mang lại cho hầu hết các ấn tượng giống như thiết của một người margin thingy :-) –

Trả lời

5

đã đọc nó từ JavaDoc.

Đặt khoảng trống giữa đường viền của thành phần văn bản và văn bản của thành phần đó. Đối tượng Border mặc định của thành phần văn bản sẽ sử dụng giá trị này để tạo ra lề thích hợp. Tuy nhiên, nếu một biên giới không mặc định được thiết lập trên thành phần văn bản, đó là trách nhiệm của đối tượng Border để tạo không gian lề thích hợp (nếu không thì thuộc tính này sẽ bị bỏ qua một cách hiệu quả). Điều này gây ra một redraw của thành phần. Một sự kiện PropertyChange ("margin") được gửi tới tất cả người nghe.

Bạn đang có lẽ là tìm kiếm một biên giới hợp chất:

BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY), 
       BorderFactory.createEmptyBorder(0, 20, 0, 0)); 
15

Margin có một số vấn đề với biên giới, để làm việc xung quanh vấn đề bạn có thể thử sử dụng một CompoundBorder thiết lập một EmptyBorder như biên giới bên trong và biên giới mong muốn (lineBorder trong trường hợp của bạn) là đường viền ngoài.

Something như thế này nên làm việc:

Border line = BorderFactory.createLineBorder(Color.DARK_GRAY); 
Border empty = new EmptyBorder(0, 20, 0, 0); 
CompoundBorder border = new CompoundBorder(line, empty); 
textField.setBorder(border); 
+0

tuyệt vời. nó hoạt động. cảm ơn rất nhiều câu trả lời. – querman

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