0

我正在尝试JList使用来自ArrayList<String[]>. 每个String[]都是 ["I","am","an","example"] 的形式,我对输入形式无能为力 - 它来自第三方。我想要的只是一个JList,每个都String[]在不同的行上展开。但是,当我使用以下代码时,前几个字符被切断了JList- 它切断了中间字符,因此它是像素而不是字符的问题。

下面的类被设置为程序其他地方的内容窗格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){
    }
}
}

问题截图: 截屏

4

1 回答 1

1

问题是您没有在面板上设置布局管理器,这意味着FlowLayout将使用默认值。如果只有一个组件,则此布局将其置于容器的中心;如果组件比容器宽,它的边缘会被修剪。

要解决这个问题,只需设置一个不同的布局管理器,例如BorderLayout

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

更多信息:使用 JFC/Swing 创建 GUI:使用布局管理器

于 2013-09-05T15:13:14.490 回答