Buttonaussehen verändern?

Hallo zusammen!

Ich möchte innerhalb von JTextPanes Buttons einfügen, die die Form von Pfeilen haben (entweder nach links oder rechts) und mit unterschiedlich langen Strings beschriftet sind.

Die Größe der Buttons passt sich ja automatisch der Stringlänge an, aber kann ich auch irgendwie ihr Aussehen verändern?

Oder sind Buttons da nicht die richtige Wahl? Ich brauche auf jeden Fall auch so etwas wie ein onMouseOver-Event o.ä.
Gibt es bessere Alternativen?

Bin für jeden Hinweis dankbar!

Gruß,
Peter
 
servus!
Ich lass mich da gerne korrigieren, aber die Form der Buttons kannst du meines Wissens nicht ändern.
Wie wäre es stattdessen mit Buttons ohne Rand, mit derselben Hintergrundfarbe wie das Textpane. Den könnte man ja ein Icon in Form eines Pfeiles un dem entsprechenden Schriftzug geben. Ist ein wenig umständlich, weil du für jeden String einen anderen beschrifteten Pfeil benötigst.
Vielleicht fällt ja jemanden noch etwas besseres ein?

*grüssle*
MeinerEiner
 
Hallo Peter,

hast du eine Entwicklungsumgebung für Java installiert? Ich benutze selbst eclipse und es ist mir eine sehr große Hilfe. Ich tue in eclipse einfach ein neues JButton erzeugen:

JButton button1 = new JButton();

Wenn ich jetzt "button1." in eclispe eintippe zeigt er mir sämtliche Methoden und Attribute die für JButton zur Verfügung stehen. Diese Auswahl kann ich durchgehen und das gewünschte auswählen. Auch zeigt eclipse für jede einzelne Methode mal weniger mal mehr ausführliche Kommentare aus dem Java SDK Dokument. Eine Swingkomponente hat zumeist soviele Einstellungsmöglichkeiten das man Sie gar nicht alle auswendig wissen könnte. Dies ist durch eine mächtige Entwicklungsumgebung wie eclipse oder vergleichbare auch nicht notwendig, wie schon oben beschrieben.

Für Mouseover-Effekte gibt es in Java den MouseListener.

Hier ein paar Links für JButton:
Sun Java Tutorial - How to Use Buttons, Check Boxes, and Radio Buttons

Java Almanac - JButton

MouseListener:
Sun Java Tutorial - MouseListener

Dies müsste dir erstmal einwenig weiterhelfen.

Vg Erdal
 
Hatte Thomas da nicht mal einen Link gepostet von jroller.com wo 3D Buttons erstellt wurden? Und haben Buttons nicht auch einen UIManager den man evt. überschreiben/modifizeiren kann?
 
Hallo nochmal,

in einer ersten Näherung habe ich folgende Zwischenlösung gefunden, mit der ich allerdings noch nicht so richtig glücklich bin:

Code:
        ImageIcon arrow_icon = null;
        String path = "images/right_arrow.gif";
        String label = "quote";
        java.net.URL imgURL = TextSamplerDemo.class.getResource(path);
        if (imgURL != null) {
        	arrow_icon = new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);            
        }
        JButton button = new JButton();
        if (arrow_icon != null) {
            button.setBackground(Color.WHITE);
            button.setText(label);
            button.setIcon(arrow_icon);
        }
Dies erzeugt einen Button, der den Schriftzug "quote" (links auf dem Button) und einen Pfeil (rechts auf dem Button) besitzt.

Am liebsten hätte ich nach wie vor Buttons (oder etwas Ähnliches!) in der Form eines Pfeiles anstatt Buttons mit einem Pfeil-Icon drin. Wenn da jemand noch Ideen hat, wäre das super!

Wenn ich im Prinzip mit der oben gezeigten Lösung leben muss, hätte ich noch 2 Fragen:

  1. Ist es möglich, die Position von Schrift und Icon auf dem Button zu verändern, d.h. dass der Pfeil nach rechts und die Schrit nach links kommt?
  2. Wie verändere ich die Größe eines Buttons? (merkwürdigerweise bekomme ich bei button.getHeight(); oder auch button.getSize(); immer nur 0.0 als Werte ...?)
Vielen Dank für Eure Hilfe!

Schöne Grüße,
Peter
 
Hallo Peter,

Das Icon ist standardmäßig auf der linken Seite. Mit dem folgenden Befehl kannst du die Reihenfolge vertauschen.

button.setHorizontalTextPosition(AbstractButton.LEADING);

Für die Größe kannst du folgendes verwenden:

Dimension d = new Dimension(200,200);
button.setPreferredSize(d);

Es gibt noch vielmehr Möglichkeiten. Du kannst das Icon über oder unter den Text plazieren. Oder den Abstand zwischen Text und Icon ändern.

Rollovereffekt:

button.setRolloverEnabled(true);
button.setRolloverIcon(icon2);

Aber das mit der Pfeilform ist so ohne weiteres mit dem Java SDK nicht zu realisieren. Du must dir schon eine eigene Komponente schreiben, oder eine externe java library finden die solches anbietet.

Vg Erdal
 
Hallo Erdal und alle,

flashray hat gesagt.:
button.setHorizontalTextPosition(AbstractButton.LEADING);

Das funktioniert super! Danke!

flashray hat gesagt.:
Für die Größe kannst du folgendes verwenden:

Dimension d = new Dimension(200,200);
button.setPreferredSize(d);

Hier habe ich Schwierigkeiten.
Ich kann den Button nicht viel kleiner machen, ohne dass die Schrift abgeschnitten wird. D.h. die Frage ist, ob ich auch die Schriftgröße eines Buttons ändern kann?

Ein weiteres Problem:
Auch wenn der Button kleiner wird, scheint er innerhalb einer Textzeile immer zu tief zu hängen, er schließt also nicht mit der unteren Kante des Textes ab, sondern hängt etwas runter ... (drücke ich mich verständlich aus?)
Kann man das auch verändern?

Und - diese Anforderung habe ich noch ganz vergessen zu erwähnen:

Ist es möglich, zu verhindern, dass der Button innerhalb des TextPanes gelöscht wird? Eine Funktion wie isEditable() hat JButton jedenfalls nicht ...

... was vielleicht auch daran liegt, dass JButtons nicht unbedingt für das gemacht sind, für das ich sie jetzt verwenden möchte!
Das führt mich wiederum zu der Frage:

Sind Buttons überhaupt der richtige Weg oder gibt es vielleicht eine bessere Alternative?

Hier nochmal kurz die Anforderungsbeschreibung:

  1. Ich möchte - unterschiedlich beschriftete - Pfeile (nach links und rechts zeigend) in einen editierbaren TextPane einfügen können [diese Pfeile stehen für XML-Tags, die der Benutzer nicht zu Gesicht bekommen soll --> vgl. eine Ansicht vom XML-Editor XMetal!]
  2. Bei einem onMouseOver soll eine Aktion ausgelöst werden [damit in separatem Fenster Attribut-Informationen angezeigt werden können]
  3. Die Pfeile sollen nicht zu löschen sein (muss ich da eher beim TextPane schauen? Kann es sein, dass man bestimmte Textteile als uneditierbar setzen kann, oder geht das nur für den gesamten Text?)
Wie gesagt - ich bin nicht so sicher, ob Buttons da überhaupt der sinnvollste Weg sind! Irgendwelche Ideen?

Sind jetzt doch sehr viele Fragen geworden!

Vielen Dank für jede Antwort!

Viele Grüße und schönes WE,
Peter
 
peter_mueller hat gesagt.:
Hier habe ich Schwierigkeiten.
Ich kann den Button nicht viel kleiner machen, ohne dass die Schrift abgeschnitten wird. D.h. die Frage ist, ob ich auch die Schriftgröße eines Buttons ändern kann?
Klar das kannst du z.b. über den Font machen
Code:
Font font = new Font(String name, int style, int size)
wobei hier noch die FontMetric zu erwähnen sind mit denen man die u.a. Informationen über die Schriftart bekommen kann, so kannst du die grösse deiner Buttons dynamisch anpassen..
Ein weiteres Problem:
Auch wenn der Button kleiner wird, scheint er innerhalb einer Textzeile immer zu tief zu hängen, er schließt also nicht mit der unteren Kante des Textes ab, sondern hängt etwas runter ... (drücke ich mich verständlich aus?)
Kann man das auch verändern?
sorry ich verstehe nicht so ganz was du meinst..
Und - diese Anforderung habe ich noch ganz vergessen zu erwähnen:

Ist es möglich, zu verhindern, dass der Button innerhalb des TextPanes gelöscht wird? Eine Funktion wie isEditable() hat JButton jedenfalls nicht ...
Wieso sollte ein Button gelöscht werden? Wenn er nicht editierbar sein soll benutze
Code:
deinButton.setEnabled(false);
... was vielleicht auch daran liegt, dass JButtons nicht unbedingt für das gemacht sind, für das ich sie jetzt verwenden möchte!
Das führt mich wiederum zu der Frage:

Sind Buttons überhaupt der richtige Weg oder gibt es vielleicht eine bessere Alternative?

Hier nochmal kurz die Anforderungsbeschreibung:

Ich möchte - unterschiedlich beschriftete - Pfeile (nach links und rechts zeigend) in einen editierbaren TextPane einfügen können [diese Pfeile stehen für XML-Tags, die der Benutzer nicht zu Gesicht bekommen soll --> vgl. eine Ansicht vom XML-Editor XMetal!]
hier verstehe ich dich auch nicht so ganz, willst du Pfeile IN einer JTextPane haben(also in dem Berreich wo normalerweise der Text steht)
unter Umständen schau dir doch mal folgenden Link an
http://www.java2s.com/ExampleCode/Swing-JFC/UIManagerresourcestotweakthelookofapplications.htm
das ist ein recht einfaches Beispiel wie man Einfluss auf den UIManager nehmen kann, vielleicht ist das der bessere Weg...
mfg
elmato
 
Hallo!

Weshalb verwendest du nicht einfach den JEditorPane? Dort kannst du auch grafische Elemente einfügen und auf Mouse/Keyboard-Events reagieren.

Gruss Tom
 
Zurück