for (int i = 1; i <= 10; i++) {
if (i == 5 || i == 10) {
list.add(String.format("<html><i>%d</i></html>", i));//%d heißt: Hier wird ein Integer eingesetzt.
} else {
list.add(String.format("%d", i));
}
}
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class Test {
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class Test {
static class FontRowDecorator<T> implements ListCellRenderer<T> {
private final ListCellRenderer<T> renderer;
private final Map<Integer, Font> rowFontMap = new HashMap<>();
public FontRowDecorator(ListCellRenderer<T> renderer) {
this.renderer = renderer;
}
public void set(int row, Font font) { rowFontMap.put(row, font); }
@Override
public Component getListCellRendererComponent(JList<? extends T> list,
T value,
int index,
boolean isSelected,
boolean cellHasFocus) {
Component comp = renderer.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
Font rowFont = rowFontMap.get(index);
if (rowFont != null) {
comp.setFont(rowFont);
}
return comp;
}
}
public void run() {
String[] entries = {"1","2","3","4","5","6","7","8","9","10"};
JComboBox<String> box = new JComboBox<>(entries);
box.setFont(box.getFont().deriveFont(Font.PLAIN));
FontRowDecorator<? super String> highlighted = new FontRowDecorator<>(box.getRenderer());
highlighted.set(4, box.getFont().deriveFont(Font.ITALIC | Font.BOLD, 18f));
highlighted.set(9, box.getFont().deriveFont(Font.ITALIC | Font.BOLD, 16f));
box.setRenderer(highlighted);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(box, BorderLayout.NORTH);
frame.setSize(800, 600);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Test().run());
}
}
for (int j= 1; j<10; j++)
{
list1.add("MASTER_V" + j);
}
Ok, wieder was gelernt, da wr ich zu voreilig. Hatte das nicht mit einer UI in Verbindung gebracht. Dass sie dafür bereits ein Popup bereitstellen, hatte ich so nicht realisiert.@Neumi5694, wenn ich mich nicht verschaut habe, dann baut das AutocompleteBehaviour die JList und bietet die Möglichkeit an, den Renderer zu setzen (https://github.com/toby1984/swing-a...swing/autocomplete/AutoCompleteBehaviour.java)
@Jhue89, ich hab das grad alles nur ganz schnell überflogen, insofern kann es durchaus sein, dass ich daneben liege. Meine Gedanke war: Du hast eine AutocmpleteBehaviour-Instanz und rufst deren setListCellRenderer-Methode auf.
AutoCompleteList list = new AutoCompleteList();
//Panel Center
list1 = list.getAutoCompletelist(list1);
textFieldTEST = newAutoCompleteField(list1);
textFieldTEST.setPreferredSize(new Dimension(400,20));
tblSchachtel1.getColumnModel().getColumn(1).setCellEditor((TableCellEditor) new DefaultCellEditor(textFieldTEST));
public JTextField newAutoCompleteField(List<String> choices) {
JTextField field = new JTextField();
AutoCompleteBehaviour<String> autoComplete = new AutoCompleteBehaviour<String>();
autoComplete.setCallback(new StringAutoCompleteCallBack(choices));
autoComplete.setListCellRenderer(new DefaultListCellRenderer());
autoComplete.setInitialPopupSize(new Dimension(400,300));
autoComplete.setVisibleRowCount(3);
autoComplete.attachTo(field);
return field;
}
autoComplete.setListCellRenderer(new DefaultListCellRenderer());
private class MyRenderer implements ListCellRenderer<XYZ> {
private final DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
@Override
public Component getListCellRendererComponent(JList<? extends XYZ> list, XYZ value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel defaultLabel = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (conditionForEditing) {
//Label oder dessen Text verändern
}
return defaultLabel;
}
}
Der Renderer wird für jede Zeile aufgerufen. Du kriegst die Zeilennummer und den anzuzeigenden Wert. Anhand von denen oder wovon auch immer dir in den Sinn kommt entscheidest du dann, ob der Wert kursiv gehört oder nicht.Mir ist noch nicht klar wie, ich an die die einzelenen Zeilen verändern kann.
private class MyRenderer implements ListCellRenderer<String> {
private final DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
boolean isCursive = false;
@Override
public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel defaultLabel = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (isCursive) {
defaultLabel.setFont(defaultLabel.getFont().deriveFont(Font.ITALIC + Font.BOLD));
} else {
defaultLabel.setFont(defaultLabel.getFont().deriveFont(Font.PLAIN));
}
isCursive = !isCursive;
return defaultLabel;
}
}