2013-09-05 3 views
0

Я пытаюсь заполнить JList предметами из ArrayList<String[]>. Каждый String[] имеет форму ["I", "am", "an", "example"], и я ничего не могу сделать о форме ввода - ее от третьей стороны. Я бы хотел просто JList с каждым String[], расширенным на другой строке. Однако, когда я использую следующий код, первые несколько символов обрезаются с левой стороны от JList - его срезающий средний символ, поэтому проблема с пикселями не является символом.JList display String [] текст отключен

Класс ниже установлен как область содержимого на JFrame в другом месте программы, я не думал, что нужно было скопировать это здесь, но если бы это было полезно, я мог бы его обрезать и поставить для просмотра.

public class BookScreen extends JPanel{ 
ListSelectionModel lsm; 
ArrayList <String> atList; 
JList atBox; 
MainForm mf; 

public BookScreen (MainForm mf){ 
    //I'm aware this bit is clunky, it was a quick and dirty to test it displays 
    //properly before I cleaned it up 
    ArrayList<String[]> books= mf.getWorld().getBooks(); 
    atList=new ArrayList(); 
    for (String[] s:books){ 
     atList.add(Arrays.toString(s)); 
    } 
    //end clunky 
    atBox = new JList(atList.toArray()); 
    lsm = atBox.getSelectionModel(); 
    lsm.addListSelectionListener(new BookScreen.AtListSelectionHandler()); 
    atBox.setVisibleRowCount(-1); 
    atBox.setLayoutOrientation(JList.HORIZONTAL_WRAP); 
    atBox.setLocation(0, 0); 
    atBox.setVisible(true); 
    this.add(atBox); 
    this.setVisible(true); 
} 
class AtListSelectionHandler implements ListSelectionListener{ 
    @Override 
    public void valueChanged(ListSelectionEvent e){ 
    } 
} 
} 

Скриншот проблемы: Screenshot

+1

Что делать, если вы добавили список в JScrollPane? this.add (новый JScrollPane (atBox))? – StanislavL

+0

Что вы добавляете в BookScreen? – Joni

+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

1

Проблема заключается в том, что вы не установите менеджер компоновки на панели, что означает, что по умолчанию FlowLayout будет использоваться. Если есть только один компонент, этот макет помещает его в центр контейнера; если компонент шире контейнера, его края обрезаются.

Для решения проблемы просто установить другой менеджер компоновки, например BorderLayout:

this.setLayout(new BorderLayout()); 
this.add(atBox); 

Больше информации: Creating a GUI With JFC/Swing: Using layout managers.

+0

Блестяще, спасибо. – MrB