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:
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]