Hallo,
von Java bin ich es gewohnt, für Comboxen, Listen, etc einen Renderer schreiben zu können. Das heißt, ich fülle die Komponente mit Objekten und der Renderer sagt der Komponente, wie sie das Objekt anzuzeigen hat (rendern).
Für Qt habe ich solch eine Möglichkeit bisher nicht gesehen. Wie gebe ich z.B. einer ComboBox ein Objekt und sage ihr, wie sie es zeichnen soll?
Gruß Lars
Einen Renderer für Komponenten (ComboBox, List, etc...)
Aber klar:
Diese Startklasse erzeugt eine Combobox, die Farben anzeigen soll. Der Renderer würde entsprechend so aussehen
Ich habe also ein anzeigendes Objekt (Combobox, Liste, Tree, etc...) und diese wird mit Objekte gefüllt. Der Renderer zeigt dann, wie das Objekt im Tree, etc... angezeigt wird.
Wie kann ich ein Objekt in eine anzeigende Komponente hängen und der dann mitteilen, was sie schreiben/zeichnen soll?
Code: Alles auswählen
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class ComboBoxTest {
public static void main(final String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox box = new JComboBox();
frame.getContentPane().add(box);
box.addItem(Color.BLACK);
box.addItem(Color.BLUE);
box.addItem(Color.RED);
box.setRenderer(new ColorRenderer());
box.setPreferredSize(new Dimension(150, 18));
box.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
System.out.println(((JComboBox) e.getSource())
.getSelectedItem());
}
});
frame.pack();
frame.setVisible(true);
}
}Code: Alles auswählen
public class ColorRenderer extends JLabel implements ListCellRenderer {
/**
* Generated serial version.
*/
private static final long serialVersionUID = 7865281848578121702L;
/**
* Constructor.
*/
public ColorRenderer() {
setOpaque(true); // do not rely on look and feel default settings
}
/**
* {@inheritDoc}
*/
public final Component getListCellRendererComponent(final JList list,
final Object value, final int index, final boolean isSelected,
final boolean cellHasFocus) {
String text = " ";
if (value instanceof Color) {
Color color = (Color) value;
setBackground(color);
setForeground(color);
}
setText(text);
setFont(list.getFont());
return this; // label is done, return
}
}Wie kann ich ein Objekt in eine anzeigende Komponente hängen und der dann mitteilen, was sie schreiben/zeichnen soll?