我正在尝试使用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){
}
}
}
问题截图:
答案 0 :(得分:1)
问题是您没有在面板上设置布局管理器,这意味着将使用默认的FlowLayout
。如果只有一个组件,则此布局将其置于容器的中心;如果组件比容器宽,则其边缘被修剪。
要解决此问题,只需设置不同的布局管理器,例如BorderLayout
:
this.setLayout(new BorderLayout());
this.add(atBox);