2014-12-11 4 views
0

Я пытаюсь добавить JScrollPane в мой JList, но по какой-то причине он не работает. Я прочитал несколько руководств как здесь, так и на других сайтах, и, похоже, я правильно следую инструкциям. Я пробовал это, используя как DefaultListModel, так и не DefaultListModel, если бы это имело бы значение. Я также попытался изменить размер самого виджета, и это тоже не сработает.JScrollPane не отображается для JList

Вот мой код. itemNames - массив из Strings[], который содержит различные имена сувениров, которые я добавляю в JList. Я использую BorderLayout() и панель я пытаюсь добавить JScrollPane к использует GridBagLayout():

souvenirList = new JList(itemNames); 
souvenirList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 
souvenirList.setLayoutOrientation(JList.VERTICAL); 
souvenirList.setVisibleRowCount(-1); 

scrollPane = new JScrollPane(souvenirList); 

gbc3.gridx = 1; 
gbc3.gridy = 1; 
centerPanel.add(scrollPane, gbc3); 

c.add(centerPanel, BorderLayout.CENTER); 

Окно показывает с именами в нем, но не JScrollPane :(Я надеялся, что кто-то может помочь я не знаю, может быть, указать на простую ошибку, которую я могу сделать. Спасибо всем заблаговременно. Пожалуйста, не публикуйте ссылки на учебные пособия по теме cus, поверьте, я их полностью изучил.

EDIT: В этом маленький исполняемый пример, который я построил, используя в основном код из моего предыдущего фрагмента, панель отображается хорошо! Почему это может быть? Может ли это что-то сделать с JPanel, к которому я добавляю? Или, может быть, GridBagLayout? спутать d здесь ....

import javax.swing.*; 
import java.awt.*; 


public class JScroll extends JFrame 
{ 
    JList souvenirList; 
    JScrollPane scrollPane; 

    Container c = getContentPane(); 

    private String[] itemNames = {"mug","cap","tee shirt","sweat shirt","pennant","mini stick", 
      "bobblehead","paper bag","foam paw","thunderstix"}; 

    public JScroll() 
    { 
     setLayout(new FlowLayout()); 

     souvenirList = new JList(itemNames); 
     souvenirList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 
     souvenirList.setLayoutOrientation(JList.VERTICAL); 
     //souvenirList.setVisibleRowCount(-1); 

     scrollPane = new JScrollPane(souvenirList); 

     c.add(scrollPane); 
    } 

    public static void main(String[] args) 
    { 
     JScroll frame = new JScroll(); 
     frame.setSize(400,300); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
+0

'souvenirList.setVisibleRowCount (-1);' не поможет, вы хотите показать строки '-1' в панели прокрутки ?? – MadProgrammer

+0

Это было частью примера оракула. Я пробовал -1, 0, 3, 4 ect ect, и это не делает разницы. – FuegoJohnson

+0

Рассмотрите возможность использования [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

ответ

0

Проблема была сосредоточена вокруг метода fill() в GridBagLayout(). Я не заметил, что он установлен в VERTICAL, что означает, что JList собирается запросить больше вертикального пространства. Исправлена ​​проблема с заменой на HORIZONTAL.

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