У меня есть Jlist внутри JScrollPane, и я установил значение прототипа, так что ему не нужно вычислять ширину для больших списков, а просто использует эту ширину по умолчанию.JList с JScrollPane и значением ячейки прототипа обертывает имена элементов (заменяет точки точками вместо горизонтальной полосы прокрутки), почему?
Проблема заключается в том, что Jlist по какой-то причине заменяет конец элемента точками (...) так, что горизонтальная полоса прокрутки никогда не будет показана.
Как отключить «обертывание»? Так что длинные элементы не заменяются точками, если они шире ширины Jlist?
Я воспроизвел проблему в небольшом примере приложения. Пожалуйста, запустите его, если вы не понимаете, что я имею в виду:
import javax.swing.*;
import java.awt.*;
public class Test
{
//window
private static final int windowWidth = 450;
private static final int windowHeight = 500;
//components
private JFrame frame;
private JList classesList;
private DefaultListModel classesListModel;
public Test()
{
load();
}
private void load()
{
//create window
frame = new JFrame("Test");
frame.setSize(windowWidth, windowHeight);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
//classes list
classesListModel = new DefaultListModel();
classesList = new JList(classesListModel);
classesList.setPrototypeCellValue("prototype value");
classesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
classesList.setVisibleRowCount(20);
JScrollPane scrollClasses = new JScrollPane(classesList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
for (int i = 0; i < 200; i++)
{
classesListModel.addElement("this is a long string, does not fit in width");
}
//panel
JPanel drawingArea = new JPanel();
drawingArea.setBackground(Color.white);
drawingArea.add(scrollClasses);
frame.add(drawingArea);
//set visible
frame.setVisible(true);
}
}
Даже если вы вынуждаете горизонтальную полосу прокрутки, вы все равно не будете иметь возможности прокрутки, потому что элемент на самом деле не больше ширины, так как от точки (...) оберточная бумага.
Заранее спасибо.
Как бы я установил предпочтительный размер тогда? Я думал, что это делает setPrototypecellValue? – Tom
Получил его сейчас, используя scrollClasses.setPreferredSize (новое измерение (100, 400)) ;. Благодарю. – Tom
См. Мой ответ ниже. Кроме того, если вы не вызываете setPrototypecellValue(), он автоматически настраивает размер JList для размещения самого широкого элемента. setPrototypecellValue() полезен, если у вас очень длинный список, и вы не хотите, чтобы Java просматривала каждую запись, чтобы найти требования к ширине. – Alinium