Toon posts:

[java] setBorder in de constructor werkt niet?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeieavond!

Ik ben bezig met het maken van een eigen applicatie, en om de Toolbar samen te stellen heb ik een stel eigen knoppen (gebaseerd op gewone JButtons) 'gemaakt'. Ik heb dus een nieuwe klasse 'ToolBarButton extends JButton'.
1 van de veranderingen die ik wilde maken t.o.v. een 'gewone' JButton, is dat er geen border om de button zit, en dat er een zwarte "LineBorder" verschijnt als je er met de muis overheen gaat. Nu heb ik dus dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
ToolBarButton(Action pAction){
    super(pAction);
    this.addMouseListener(this);
    this.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
}

public void mouseEntered(MouseEvent me){
    JButton source;

    source = (JButton) me.getSource();
    source.setBackground(Color.blue);
    source.setBorder(BorderFactory.createLineBorder(Color.black, 1));
}


Dit compiled allemaal goed, echter, als ik het programma start, dan verschijnt er een 'normale' (lelijke) Swing-border! Pas als ik er met de muis overheen ga, dan verschijnt de 'goede' border! Waarschijnlijk zou ik de "setBorder" aan moeten roepen in de methode paint (of, in dit geval paintComponent), maar dat loopt ook helemaal de soep in (de buttons verschijnen niet, paintComponent mag je eigenlijk niet aanroepen?).
Weet iemand een oplossing voor mijn probleem?

Verwijderd

Moet je niet paint() of repaint() of update() ofzo aanroepen nadat je de goede border hebt ingesteld?

  • nxt
  • Registratie: November 2001
  • Laatst online: 12-06 10:00

nxt

weet je zeker dat ergens anders niet setBorder nog wordt aangeroepen?
probeer om te testen anders eens
super.setBorder(...) ipv this.setBorder(...)
en de setBorder method te overriden.

misschien is het ook handig om de validate() method aan te roepen om er zeker van te zijn dat de JToolbar snapt dat de layout v/d button veranderd is.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class RollOverButton extends JButton{

    public RollOverButton(Action action){
        this();
        setAction(action);
    }

    public RollOverButton(String text){
        this();
        setText(text);
    }

    public RollOverButton(){
        addMouseListener(new MouseHandler());
        setBorderPainted(false);
    }

    private class MouseHandler extends MouseAdapter{
        public void mouseEntered(MouseEvent me) {
            if (isEnabled()){
                setBorderPainted(true);
            }
        }

        public void mouseExited(MouseEvent me) {
            if (isEnabled()){
                setBorderPainted(false);
            }
        }
    }
}

[ Voor 4% gewijzigd door Alarmnummer op 20-11-2003 08:58 ]