2010-02-17 26 views
6

Mã này là như thế này:setBorder trên JTextField không hoạt động? hoặc làm nó?

JTextField txt = new JTextField(); 
txt.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.red)); 

Tuy nhiên lĩnh vực văn bản được bỏ qua cuộc gọi của tôi để setBorder. Không có thay đổi nào.

tôi được thay thế bằng một JLabel (ví dụ)

JLabel txt = new JLabel(); 
txt.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.red)); 

tôi sẽ thấy đường viền màu đỏ.

Ai đó có thể cho tôi biết lý do không? Hoặc thậm chí còn giải thích tốt hơn cho tôi cách thêm đường viền trong JTextField?

+0

Điều đó "nên" hoạt động. Bạn đang sử dụng JTextField hoặc một lớp tùy chỉnh mở rộng JTextField? Bạn đang làm gì với JTextField? Bạn có đặt đường viền ở nơi khác không? – Pace

+0

Mất hai giây để chứng minh nó có hoạt động hay không. Trung thực. Hoặc là bạn lấy từ của tôi hoặc viết một bài kiểm tra nhỏ và xem cho bản thân của bạn. Dù sao các bit thông tin khác là: Uimanager được đặt trên Windows UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); và tôi không làm việc trên một lớp mở rộng JTextField. Tôi đang sử dụng chính JTextField. –

+0

"để chứng minh" Hành vi sẽ phụ thuộc vào PL & F, phiên bản PL & F, nền tảng, phiên bản nền tảng và có thể cấu hình. Không dễ dàng để chứng minh. Sẽ dễ dàng hơn nếu bạn thử một ví dụ có thể biên dịch được. –

Trả lời

6

Check-out this explanation/recommendation from the Java API

Nói chung, khi bạn muốn thiết lập một biên giới trên một thành phần Swing chuẩn khác hơn JPanel hoặc JLabel, chúng tôi khuyên bạn nên đặt các thành phần trong một JPanel và thiết lập đường viền trên JPanel.

Vì vậy, bạn nên lồng JTextField của bạn trong một JPanel hoặc JLabel và đặt đường viền trên JPanel hoặc JLabel. Thì đấy!

+5

Heh. Tôi đoán việc thay đổi một dòng tài liệu API dễ dàng hơn việc sửa một đoạn mã để sử dụng 'BorderUIResource'. –

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