2010-06-11 10 views
18

Ich habe eine JButton, die aus verschiedenen Gründen möchte ich wie eine Schaltfläche handeln, aber wie ein JLabel aussehen. Es muss eigentlich kein JLabel unter der Haube sein, ich will einfach nicht, dass die erhöhte Knopfleiste auftaucht.Zeichnen Sie einen JButton, um wie ein JLabel aussehen (oder zumindest ohne die Schaltfläche Rand?)

Gibt es eine einfache Möglichkeit, das "Button-Look" für JButtons zu deaktivieren, aber alle Tastenfunktionen zu behalten?

Ich könnte eine Art kompilierter Unterklasse-Hyperbutton erstellen, der zu Anzeigezwecken an einen JLabel delegiert wird, aber ich hoffe wirklich, dass etwas in Richtung button.lookLikeAButton(false) ist.

+2

Können Sie nicht direkt ein 'JLabel' verwenden und' onClickEvents' verarbeiten? –

+0

Nun, für den Anfang brauche ich buchstäblich etwas, das ich als JButton weitergeben kann. Außerdem brauche ich nicht nur onClickEvents, ich brauche eigentlich die ganze Schaltfläche "ding" - Aktionen, Scharfschaltung, etc. –

Antwort

24

Sie Folgendes tun möchten.

Ich habe den obigen Code in Fällen verwendet, in denen ich eine Schaltfläche "nur Symbol" wollte.

+1

Perfekt! Das hat genau das gemacht, wonach ich gesucht habe. Vielen Dank! –

+0

Ich fügte diese hinzu, und dann sah es genauso aus wie das JLabel und der Cursor würde sich zu einer Hand ändern, so dass der Benutzer weiß, dass er anklickbar ist: 'setBorder (new EmptyBorder (0,0,0,0)); setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR)); ' – hepcat72

+0

Als Alternative können Sie auch das Symbol ändern (z. B. die Schattierung) oder die Hintergrundfarbe ändern, um den Benutzer darüber zu informieren, dass es anklickbar ist. – Avrom

2

Setzen Sie die Hintergrundfarbe auf transparent und den Rahmen auf eine EmptyBorder-Instanz.

z.

JButton button = new JButton(); 
    button.setBackground(null); 
    button.setOpaque(false); 
    button.setBorder(new EmptyBorder()); 

Der Text wird nach oben noch unten, als Sie auf die Schaltfläche klicken und die Taste durch Anklicken, Halten und „unscharf“ kann immer noch durch Bewegen der Maus aus dem Tastenbereich „bewaffnet“ sein.

Wenn Sie dieses Verhalten nicht möchten, möchten Sie wahrscheinlich keine Schaltfläche verwenden und stattdessen eine echte Beschriftung verwenden.

-1

Könnte es eigentlich einfacher sein, einfach einen Maus-Listener zu einem JLabel hinzuzufügen? Du könntest die Farben bei mousePressed und mouseReleased anpassen, und machst deine Aktion mit mouseClicked?

 setFocusPainted(false); 
     setMargin(new Insets(0, 0, 0, 0)); 
     setContentAreaFilled(false); 
     setBorderPainted(false); 
     setOpaque(false); 

Möglicherweise möchten Sie setFocusPainted(false) auszuschließen, wenn Sie es wollen den Fokus tatsächlich malen (z gestrichelte Linie Grenze auf Windows Look and Feel):

+2

Es gibt so viel mehr zu einer Schaltfläche als ein Maus-Listener. Wie wäre es, es mit einer Aktion zu verknüpfen? Was ist mit bewaffnet/gedrückt/freigegeben? Was ist mit Entprellen? Ein Etikett wie einen Knopf zu gestalten, ist viel komplizierter, als einen Knopf wie ein Etikett aussehen zu lassen, also gehen Sie mit der Pixelamputation vor, es wird weniger schmerzhaft. – shemnon

+0

@shemnon: genau. –

1
button.setBorderPainted(false); 
button.setContentAreaFilled(false); // ? 
0
setContentAreaFilled(false); 
setBorderPainted(false); 
setOpaque(false); 

Diese drei Zeilen machen den Trick.

Verwandte Themen