23 package com.realtime.crossfire.jxclient.gui.combobox;
34 import java.awt.Component;
35 import java.awt.Dimension;
36 import java.awt.event.ActionListener;
37 import java.util.List;
38 import java.util.regex.Pattern;
39 import javax.swing.DefaultComboBoxModel;
40 import javax.swing.JComboBox;
41 import javax.swing.JList;
42 import org.jetbrains.annotations.NotNull;
43 import org.jetbrains.annotations.Nullable;
73 private final DefaultComboBoxModel<T>
model =
new DefaultComboBoxModel<>();
110 comboBox.setRenderer(this::getListCellRendererComponent);
124 final Dimension result =
comboBox.getPreferredSize();
125 return result ==
null ? super.getPreferredSize() : result;
130 final Dimension result =
comboBox.getMinimumSize();
131 return result ==
null ? super.getMinimumSize() : result;
135 public void setBounds(
final int x,
final int y,
final int width,
final int height) {
136 super.setBounds(x, y, width, height);
146 if (elements ==
null) {
149 final int size =
model.getSize();
150 if (size == elements.size()) {
152 for (i = 0; i < size; i++) {
153 if (!
model.getElementAt(i).equals(elements.get(i))) {
163 setVisible(elements !=
null);
167 model.removeAllElements();
168 if (elements !=
null) {
169 for (T element : elements) {
170 model.addElement(element);
190 protected abstract Component
getListCellRendererComponent(@NotNull
final JList<? extends T> list, @Nullable
final T value,
final int index,
final boolean selected,
final boolean cellHasFocus);
200 @SuppressWarnings(
"unchecked")
final T item = (T)
comboBox.getSelectedItem();
236 @SuppressWarnings(
"unchecked")
final T item = (T)
comboBox.getSelectedItem();
238 if (text.isEmpty()) {
242 final StringBuilder sb =
new StringBuilder();
243 for (
final String line0 : text.split(
"\n")) {
244 final String line = line0.trim();
247 while (line.length() > index+80) {
248 int nextIndex = line.lastIndexOf(
' ', index+80);
249 if (nextIndex == -1) {
250 nextIndex = line.indexOf(
' ', index+80);
251 if (nextIndex == -1) {
252 nextIndex = line.length();
254 if (nextIndex > index+140) {
255 nextIndex = index+140;
258 sb.append(sb.length() == 0 ?
"<html>" :
"<br>").append(line, index, nextIndex);
261 while (index < line.length() && line.charAt(index) ==
' ') {
265 sb.append(sb.length() == 0 ?
"<html>" :
"<br>").append(line, index, line.length());