Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JList显示字符串[]文本截断_Java_Swing_Jlist - Fatal编程技术网

Java JList显示字符串[]文本截断

Java JList显示字符串[]文本截断,java,swing,jlist,Java,Swing,Jlist,我正在尝试使用ArrayList中的项目填充JList。每个String[]的格式都是[“I”、“am”、“an”、“example”],对于输入表单,我无能为力——它来自第三方。我想要的只是一个JList,每个String[]在不同的行上展开。但是,当我使用以下代码时,前几个字符会从JList的左侧切掉-它会切掉中间的字符,因此这是像素而不是字符的问题 下面的类被设置为程序中其他地方的JFrame上的内容窗格,我认为没有必要将其复制到这里,但如果它有用的话,我可以将其修剪下来并放在上面查看 p

我正在尝试使用
ArrayList
中的项目填充
JList
。每个
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){
    }
}
}
公共类BookScreen扩展了JPanel{
列表选择模型lsm;
ArrayList atList;
JList-atBox;
主窗体mf;
公共书架(主窗体mf){
//我知道这一点是笨重的,它是一个快速和肮脏的测试它显示
//在我把它清理干净之前
ArrayList books=mf.getWorld().getBooks();
atList=新的ArrayList();
for(字符串[]s:书籍){
atList.add(Arrays.toString);
}
//末端笨重
atBox=newjlist(atList.toArray());
lsm=atBox.getSelectionModel();
lsm.addListSelectionListener(新BookScreen.AtListSelectionHandler());
atBox.setVisibleRowCount(-1);
atBox.setLayoutOrientation(JList.HORIZONTAL_WRAP);
设置位置(0,0);
atBox.setVisible(true);
添加(atBox);
此.setVisible(true);
}
类AtListSelectionHandler实现ListSelectionListener{
@凌驾
public void值已更改(ListSelectionEvent e){
}
}
}
问题截图:
问题在于您没有在面板上设置布局管理器,这意味着将使用默认的
FlowLayout
。如果只有一个组件,此布局将其放置在容器的中心;如果零部件比容器宽,则修剪其边

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

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

更多信息:。

如果在JScrollPane中添加列表会怎么样?这个.add(新的JScrollPane(atBox))?你要把书架添加到什么地方?为了更快地获得更好的帮助,请发布一条。@Stansilav-Hmmm,好主意@Joni-JFrame的内容窗格-我会把它剪下来扔掉@Andrew Thompson-如上所述,我将调整并添加.Ha附带的
JFrame
。无法解决如何使SSCE正常工作,并且不愿就此提出新问题。。。