2013-11-06 4 views
1

Я хочу, чтобы задать фиксированную ширину моего JListКак указать ширину списка Jlist?

Я последовал примеру обеспечивается Gilbert Le Blanc 22k

 getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS)); 
     Panel panel = new JPanel(); 
     panel.setBackground(Color.WHITE); 
     getContentPane().add(panel); 

     String [] queries = {"a", "b", "a", "b" , "a", "b", "a", "b"}; 
     panel.setLayout(new BorderLayout()); 
     JList list = new JList(queries); 
     list.setMaximumSize(new Dimension(200, 200)); // this line does not do the job 
     list.setMinimumSize (new Dimension (200,200)); 
     list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     list.setVisibleRowCount(5); 
     JScrollPane scrollPane_1 = new JScrollPane(list); 
     panel.add(scrollPane_1 , BorderLayout.CENTER); 

Но это не заставит размер быть 200 200. Мне нужна ширина JScrollPane до 200

+1

пожалуйста, Что я хочу, чтобы указать размер моего JList, его о размере JList или количества visisble предметов или ??? ..... – mKorbel

+0

речь идет о ширине JScrollPane – Donotello

+1

_I нужно, чтобы ширина JScrollPane была 200_ - почему? Фиксированные размеры пикселей ** всегда ** (до третьего приближения или около того ;-) признак чего-то неладного с вашим подходом/требованием. Во всяком случае, [не используйте setXXSize, когда-либо] (http://stackoverflow.com/a/7229519/203657) http://stackoverflow.com/a/7229519/203657 – kleopatra

ответ

6

Нет, не установлен размер JList, который уже добавлен в JScrollpane. Поскольку JList имеет реализованную функцию getPreferredScrollableViewportSize(), которая вычисляет предпочтительный размер viewport, вычисляя ширину ячейки и ее высоту. Пусть JScrollPane справится с этим. Если требуется, попробуйте добавить размер JScrollPane's. Однако, чтобы контролировать количество медийные и ориентацию, вы можете использовать:

  • setLayoutOrientation, который позволяет отображать список своих данных в несколько колонок. Значение:

    1. JList.HORIZONTAL_WRAP: указывает, что список должен отображать его элементы слева направо перед оборачивать на новую строку.
    2. JList.VERTICAL_WRAP: который указывает, что данные будут отображаться сверху вниз (как обычно) перед переносом в новый столбец.
  • setVisibleRowCount(-1) делает список отображения максимальное количество элементов, возможных в доступном пространстве на экране. Другим распространенным использованием setVisibleRowCount является указание панели прокрутки списков, сколько строк список предпочитает отображать.

Отъезд: How to Use List для демо и примеров.

3

Обычно ваш размер списка - это количество элементов, которые вы вставляете в него, поэтому он не будет исправлен таким образом. Вы не можете создать список из N пустых пространств, потому что тогда он не был бы списком (какова была бы его длина?) - массив подошел бы здесь намного лучше. Если вы хотите создать список фиксированного размера см:

fixed size list in Java

Вы также можете создать класс, который позволяет добавить заданное число элементов в список, а затем запрещает дальнейшее дополнение (если ваш Лист размер добирается до нужного N).

+1

Я полагаю, что он спрашивает о размере своего GUI, основываясь на настройке Dimension. – Compass

+0

Это правильно. Прошу прощения за путаницу. Я хочу фиксированную ширину – Donotello

3

Решение состоит в изменении размера JScrollPane. Если я правильно помню, JList заполните JScrollPane.

JScrollPane scrollPane_1 = new JScrollPane(list); 
scrollPane_1.setMaximumSize(new Dimension(200, 200)); 
scrollPane_1.setMinimumSize (new Dimension (200,200)); 
panel.add(scrollPane_1 , BorderLayout.CENTER); 
+0

Да, метод - 'yourScrollPane.getViewport(). SetViewSize (yourDimension);'. – Radiodef

+0

Нет, вы поощряете OP идти в неправильном направлении. никогда не использовать 'NullLayout', никогда не использовать' setLocation' и 'bounds' – Sage

5

речь идет о ширине JScrollPane

Большинство менеджеров компоновки используют предпочтительный размер, чтобы определить оптимальный размер, а затем использовать мин/макс для обработки изменения размера, если кадр никогда не изменяется.

Я хотел бы попробовать что-то вроде:

JList list = new JList(queries); 
list.setVisibleRowCount(5); 
JScrollPane scrollPane_1 = new JScrollPane(list); 
Dimension d = list.getPreferredSize(); 
d.width = 200; 
scrollPane_1.setPreferredSize(d); 

Хотя это редко хорошая идея, чтобы вручную установить предпочтительный размер компонента. Пусть LAF определит подходящий предпочтительный размер. Например, я бы никогда не увеличил высоту кода, потому что тогда ваш список мог отображать 4 1/2 строки, которые непрофессионально выглядят.

Ширина, которую я могу понять немного, если у вас только одна символьная строка, она может выглядеть слишком узкой. Но в этом случае лучшим решением было бы создать собственный рендер и использовать EmptyBorder, который выделяет дополнительное пространство слева/справа, а затем пусть LAF будет размером JList.

+0

даже с пониманием _little_ и даже если _only_ устанавливает ширину: жесткое кодирование xxSizes нарушит визуальные эффекты при малейшем изменении, а наполовину стабильный код приложения потребуется повторно - установить динамически любое свойство (которое не может быть известно во время кодирования), которое может повлиять на значение. Единственный выход - не использовать эти методы вообще. – kleopatra

1

Вы можете просто использовать setFixedCellWidth вашего JList.

+0

именно то, что мне нужно - бьет десятки других подробных объяснений, которые я нашел – ThisClark

0
// Loop through the arrayList of doubles and convert to String 
    // with dollar signs, 2 decimal places, and extra spacing. 
    for(int i = 0; i < bookPrices.size(); i++) 
    { 
     bookPricesOnlyStrings.add(String.format("$%,.2f%-35s", bookPrices.get(i), "")); 
     System.out.println(bookPricesOnlyStrings.get(i)); 
    } 

У меня была та же проблема. Мои данные были всего 5 символов и выглядели по сравнению с моим другим окном. Поэтому я использовал String.format, чтобы добавить пробелы в конец. Это расширило мой JList. Я также смог добавить знаки доллара и форматировать десятичные знаки.

enter image description here

Смежные вопросы