eigener "Abstandshalter" vs. LayoutManager

i.b.fan

Aktives Mitglied
Hallo zusammen,

nachdem ich immer wieder mal Icons (mittels JLabel) auf einem Panel als "Controller" benutzen möchte, stehe ich vor der Frage, wie ich möglichst simpel und doch flexibel wenigstens rudimentär gestalterisch Einfluss nehmen kann.

Mein Denkansatz ist: Panel mit preferredSize anlegen, BoxLayout mit Ausrichtung verpassen und dann einfach die JLabels mit den Icons adden. (soweit noch nix Neues)
Nun brauche ich mal mehr, mal weniger Abstand zwischen den Icons (aus gestalterischen Gründen). Hierzu habe ich folgende Klasse(en) geschrieben, die mir ein transparentes Label mit transparentem Icon der übergebenen Ausdehnung erzeugt, welches ich dann einfach zwischen zwei "echten" Icons platziere:

panel.add(iconLabel1);
panel.add(new separator(3, 16);
panel.add(iconLabel2);

Was meint Ihr dazu? Ist das eine praktikable Lösung oder ein absoluter Tasse-Nagel-Ansatz?

i.b.fan :)

Hier die (funktionierende) Klasse:

Java:
/*
 * Creates a transparent label with transparent icon (size: width*height)
 */

package ibfan;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.Icon;
import javax.swing.JLabel;

/**
 *
 * @author i.b.fan
 */
public class Separator extends JLabel{

    private Separator(){}  //do nothing, only to avoid use from outside
            
    public Separator(int width, int height){

        super();

        if(width < 1) width = 1; //minimum size: one pixel
        if(height < 1) height = 1; //minimum size: one pixel

        this.setPreferredSize(new Dimension(width, height)); //könnte man weglassen
        this.setIcon(new TransparentIcon(width, height));

    }
}//end class Separator

class TransparentIcon implements Icon{

    private int width, height;
    private Color color = new Color(0,0,0,0); //transparent

    protected TransparentIcon(int width, int height){
        this.width = width;
        this.height = height;
    }

    public int getIconWidth(){
        return width;
    }

    public int getIconHeight(){
        return height;
    }

    public void paintIcon( Component c, Graphics g, int x, int y){

        g.setColor(color);
        g.fillRect(0, 0, width, height);
    }
}//end class TransparentIcon
[/Java]
 

i.b.fan

Aktives Mitglied
Manche Leute sagen ja: Praktikabel ist, was funktioniert :D
Aber ... ein einfaches JPanel, dessen PreferredSize passend gesetzt ist, hätte es vermutlich auch getan

Hmm, nicht ganz, da ja die Zwischenräume ungleichmäßig groß sein (können) sollen.

- oder eben gleich sowas wie aus Box (Java 2 Platform SE v1.4.2) ... :bahnhof:

Oh, das ist ja so ziemlich das, was ich wollte :D
Muss ich gleich mal probieren. Nur komisch, dass es kein createHorizontalStrut() gibt - oder "dreht" sich das mit der AXIS mit?
Interessant klingt ja auch das "glue"...

Auf jeden Fall mal danke für den Tipp! :)

i.b.fan :)
 

Marco13

Top Contributor
Hmm, nicht ganz, da ja die Zwischenräume ungleichmäßig groß sein (können) sollen


Hm. Wo genau wäre der Unterschied zwischen einem
Java:
Separator s = new Separator(10,20);
add(s);
und einem
Java:
JPanel s = new JPanel();
s.setPreferredSize(new Dimension(10,20));
add(s);
(abgesehen von einer gesparten Zeile)?
 

i.b.fan

Aktives Mitglied
[...]
Java:
JPanel s = new JPanel();
s.setPreferredSize(new Dimension(10,20));
add(s);
[...]

Ach so meintest Du das *stirnpatsch*. Ich dachte Du meinst das Panel, auf dem die Labels liegen. Und da kriegt man durch Vergrößern mit entspr. Layout ja (erstmal) nur gleichmäßige Abstände hin.

Manchmal kann es sooo einfach sein - aber da sieht man halt die mangelnde Übung!
Ich hatte das übrigens als erstes genau so mit einem Label (ohne Icon) probiert, aber wenn da kein Text drin steht geht das wohl trotz PreferredSize auf 0 Pixel. Drum dann die Krücke mit dem transparenten Icon ;)

i.b.fan :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Dez-->Binär mit eigener bit Anzahl Erkennung. Java Basics - Anfänger-Themen 3
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
B Eigener Validierungseditor? Java Basics - Anfänger-Themen 3
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
Bluedaishi Jar mit eigener JRE Java Basics - Anfänger-Themen 7
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
J Threads Problem mit eigener ArrayList Java Basics - Anfänger-Themen 2
E MCLauncher eigener Client workt nicht? Java Basics - Anfänger-Themen 4
A Input/Output Datenströme schließen in eigener Methode Java Basics - Anfänger-Themen 5
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
Q ArrayList mit eigener Klasse in Java sotieren Java Basics - Anfänger-Themen 2
N BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung. Java Basics - Anfänger-Themen 11
C OOP Erstellen eigener Objekte die es schon gibt "schlau"? Java Basics - Anfänger-Themen 3
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
L Eigener FilterReader Java Basics - Anfänger-Themen 12
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
M import von eigener Klasse Java Basics - Anfänger-Themen 12
P ArrayList aus eigener Klasse "überschreibt" Werte nicht Java Basics - Anfänger-Themen 4
M xPos und yPos eigener Klassen geben lassen Java Basics - Anfänger-Themen 3
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
D Klassen Problem mit Eigener Array-Klasse Java Basics - Anfänger-Themen 10
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
B Datentypen Probleme mit eigenem Get() bei eigener HashMap Java Basics - Anfänger-Themen 6
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
G Datentypen "Liste" eigener Objekte durchsuchen Java Basics - Anfänger-Themen 6
S mit eigener Klasse JTextField ändern Java Basics - Anfänger-Themen 3
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
B Ordner öffnen (eigener Dateibrowser) Java Basics - Anfänger-Themen 8
B Eigener Webserver + Eigener Webbrowser Java Basics - Anfänger-Themen 7
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
D Container mit eigener Klasse Java Basics - Anfänger-Themen 5
B Verwenden eigener Object-Klassen Java Basics - Anfänger-Themen 9
H Eigener Button Java Basics - Anfänger-Themen 2
M Eigener Iterator für LinkedList Java Basics - Anfänger-Themen 20
I Java eigener MSN Messenger schreiben Java Basics - Anfänger-Themen 3
R Event in eigener Klasse implementieren ? Java Basics - Anfänger-Themen 8
G Fortlaufende Aktualisierung bei eigener Klasse Java Basics - Anfänger-Themen 2
G IOException Problem in eigener Klasse Java Basics - Anfänger-Themen 8
B Import Problem mit eigener Klasse. Java Basics - Anfänger-Themen 8
G Eigener Parser Java Basics - Anfänger-Themen 4
T Problem mit eigener Klasse Java Basics - Anfänger-Themen 7
A eigener Explorer via Java? Java Basics - Anfänger-Themen 9
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
T Öffnen externer Datei als eigener Prozess Java Basics - Anfänger-Themen 8
G Datei aus eigener JAR-Datei verwende Java Basics - Anfänger-Themen 2
N Porblem mit dem Importieren eigener Pakete Java Basics - Anfänger-Themen 4
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 10
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 5
L ActionListener in eigener Klasse Java Basics - Anfänger-Themen 3
T Erstellen eigener packages Java Basics - Anfänger-Themen 6
G JMenuBar in eigener Klasse erstellen Java Basics - Anfänger-Themen 3
A Eigener Datentyp? Java Basics - Anfänger-Themen 39
F Eigener IP-Paket-Header Java Basics - Anfänger-Themen 15
U Breite von Textfeldern trotz Layoutmanager Java Basics - Anfänger-Themen 4
T LayoutManager für Spiele Java Basics - Anfänger-Themen 2
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
D Grösse eines JPanel hinsichtlich LayoutManager festlegen Java Basics - Anfänger-Themen 4
M Suche den passenden LayoutManager Java Basics - Anfänger-Themen 4
J Welchen Layoutmanager nehmen? Java Basics - Anfänger-Themen 4
P Java LayoutManager... Java Basics - Anfänger-Themen 3
A Hilfe mit LayoutManager, Applet zu Applikation umwandeln Java Basics - Anfänger-Themen 13
A RadioButtons in LayoutManager Java Basics - Anfänger-Themen 6
G JLabel mittig ohne LayoutManager Java Basics - Anfänger-Themen 2
kulturfenster jar und LayoutManager Java Basics - Anfänger-Themen 5
G Welchen Layoutmanager verwenden? Java Basics - Anfänger-Themen 7
B Komponenten im LayoutManager zentrieren Java Basics - Anfänger-Themen 5
B LayoutManager Anorden von verschiedenen JPanels Java Basics - Anfänger-Themen 5
J Mit welchem LayoutManager Problem lösen? Java Basics - Anfänger-Themen 2
G LayoutManager kombinieren Java Basics - Anfänger-Themen 2
C Layoutmanager richtig verwenden? Java Basics - Anfänger-Themen 9
R LayoutManager Problem Java Basics - Anfänger-Themen 2
T Hilfe bei LayoutManager-Verschachtelung Java Basics - Anfänger-Themen 3
S LayoutManager Java Basics - Anfänger-Themen 15
S welchen layoutmanager Java Basics - Anfänger-Themen 9
G JTable ohne LayoutManager Java Basics - Anfänger-Themen 3
B Mit dem Layoutmanager die Buttongrösse bestimmen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben