JList显示String []文本被截断

时间:2013-09-05 13:54:24

标签: java swing jlist

我正在尝试使用JList中的项目填充ArrayList<String[]>。每个String[]都是[“我”,“我”,“一个”,“示例”]的形式,我无法对输入表单做什么 - 它来自第三方。我想要的只是一个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){
    }
}
}

问题截图: Screenshot

1 个答案:

答案 0 :(得分:1)

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

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

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

更多信息:Creating a GUI With JFC/Swing: Using layout managers