2010-02-17 7 views
6

Kod jest tak:setBorder na JTextField nie działa? czy to robi?

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

Jednak pole tekstowe ignoruje moje wezwanie do setBorder. Brak jakichkolwiek zmian.

miałbym wymienić go na JLabel (na przykład)

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

chciałbym zobaczyć czerwoną ramkę.

Czy ktoś może mi powiedzieć, dlaczego? Albo jeszcze lepiej mi wytłumaczyć, jak dodać obramowanie w JTextField?

+0

To "powinno" działać. Czy używasz JTextField lub niestandardowej klasy, która rozszerza JTextField? Co jeszcze robisz w JTextField? Czy ustawiasz granicę w innym miejscu? – Pace

+0

Potwierdzenie, czy tak się dzieje, czy nie, wymaga dwóch sekund. Szczery. Albo weźmiesz moje słowo, albo napiszesz mały test i zobaczysz dla siebie. W każdym razie inne informacje są następujące: Uimanager jest ustawiony na Windows UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); i nie pracuję na klasie, która rozszerza JTextField. Używam samego JTextField. –

+0

"udowodnić" Zachowanie będzie zależało od PL & F, wersji PL & F, platformy, wersji platformy i ewentualnie konfiguracji. Nie tak łatwo to udowodnić. Byłoby łatwiej wypróbować, jeśli dołączono przykład kompilacji. –

Odpowiedz

6

Wyjazd this explanation/recommendation from the Java API

W ogóle, jeśli chcesz ustawić obramowanie na standardowy komponent Swing inny niż JPanel lub JLabel, zalecamy, aby umieścić komponent w JPanel i zestaw granica na JPanel .

Więc ... powinieneś zagnieździć JTextField w JPanel lub JLabel i umieścić granicę na JPanel lub JLabel. Voila!

+5

Heh. Przypuszczam, że zmiana linii dokumentacji API jest łatwiejsza niż ustalenie kulki kodu w celu użycia 'BorderUIResource'. –