Проблема: у меня есть поле со списком, которое должно вписаться в фиксированное пространство как часть приложения Swing. Однако его содержимое может быть довольно длинным. Я бы хотел, чтобы сама коробка была фиксированного размера, с усеченным содержимым. Однако при нажатии на стрелку вниз я бы хотел, чтобы он действовал аналогично выделению HTML и отображал поле, достаточно длинное, чтобы соответствовать самой длинной записи в раскрывающемся списке. ListCellRenderer может быть способом пойти на это; Я не уверен.
Возможно также, что мне нужна какая-то реализация javax.swing.plaf.basic.ComboPopup и моего собственного ComboBoxUI. Я копался в коде SwingUtilities, чтобы понять, как DefaultListCellRenderer выполняет свои вычисления. Он использует JLabel, и BasicLabelUI вызывает SwingUtilities.layoutCompoundLabel (в конечном итоге в стеке вызовов), который выполняет отсечение. BasicComboPopup, единственная реализация ComboPopup в коде Java 6, через которую я копался, казалось, делегировал:
JList.computeVisibleRect (Компонент c, прямоугольник visibleRect)
Кто-нибудь делал это раньше? Есть указатели?