2012-08-13 8 views

Odpowiedz

8

Chciałbym dodać obramowanie do pola tekstowego, coś wzdłuż linii:

Border oldBorder = jTextField.getBorder(); 
Border redBorder = BorderFactory.createMatteBorder(0, 0, 0, 5, Color.RED); 
Border newBorder = BorderFactory.createCompoundBorder(redBorder, oldBorder); 
jTextField.setBorder(newBorder); 

ten podejście zachowuje starą granicę i owija ją w twoją czerwoną (częściową) granicę.

+0

czystsze niż druga odpowiedź, chociaż nie sądzę, że OP musi zachować oryginalną granicę. – brimborium

+0

Bardzo dziękuję Jakubowi. Ponieważ stosuję tylko matteBorder, pole tekstowe również traci oryginalną obramowanie i wyświetla tylko jedną jednostronną czerwoną ramkę i wygląda raczej jak linia, a nie pole tekstowe. Ale twoja odpowiedź uniknęła tego scenariusza. – Kanth

4

Można utworzyć własną klasę CustomBorder, rozszerzając klasę Border i tworząc własne niestandardowe obramowanie dla komponentu. Ustawić ją dzwoniąc setBorder() na swoim Component „s przykład coś takiego:

class MyBorder implements Border { 

    @Override 
    public void paintBorder(Component cmpnt, Graphics grphcs, int x, int y, int width, int height) { 
     //draw your border here 
    } 

    @Override 
    public Insets getBorderInsets(Component cmpnt) { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public boolean isBorderOpaque() { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

} 

referencyjny:

+1

Dlaczego ** Znak zapytania ** na samym końcu? To nie ma żadnego sensu. Chociaż +1 dla niestandardowej granicy :-) –

+0

Lol była to sugestia z pytaniami :) –

+1

Podczas dodawania fragmentów, rozsądniej byłoby używać nazw własnych zamiast ** i/i1/i2/i3 **, lepiej używać, * * int x, int, int, int, height **, dzięki czemu przekazuje wiadomość, bez więcej myśli :-) –

8

W przykładzie poniżej dodałem lewej stronie granicy 5 pikseli:

JTextField jtf = new JTextField();   
jtf.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, Color.BLACK)); 

Thi s jest po prawej stronie granicy:

jtf.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 5, Color.BLACK)); 

Mam nadzieję, że to jest to, czego po

Powiązane problemy