java - JList 没有出现

标签 java swing layout-manager jlist

private static void initGUI(char[][] code){
    
    int width = (int) (code[0].length * new JLabel().getFont().getSize2D());
    int height = (int) (code.length * new JLabel().getFont().getSize2D()) + 200;
    
    gridgui = new JLabel[code.length][code[0].length];
    for(int x = 0; x < code.length; ++x){
        for(int y = 0; y < code[0].length; ++y){
            gridgui[x][y] = new JLabel();
            gridgui[x][y].setText(""+code[x][y]);
            gridgui[x][y].setBackground(Color.WHITE);
            gridgui[x][y].setOpaque(true);
        }
    }
    listModel = new DefaultListModel<Integer>();
    listModel.addElement(5);

    //Create the list and put it in a scroll pane.
    stacklist = new JList<Integer>(listModel);
    JScrollPane listScrollPane = new JScrollPane(stacklist);
    listScrollPane.getViewport().setView(stacklist);
    
    frame = new JFrame("Befunge 93! Wow!");
    
    gridpanel = new JPanel();
    gridpanel.setLayout(new GridLayout(gridgui.length, gridgui[0].length));
    gridpanel.setPreferredSize(new Dimension(width, height));
    
    for(int x = 0; x < gridgui.length; ++x){
        for(int y = 0; y < gridgui[0].length; ++y){
            gridpanel.add(gridgui[x][y]);
        }
    }
    
    stackpanel = new JPanel();
    stackpanel.setLayout(new GridLayout(100, height));
    stackpanel.setPreferredSize(new Dimension(width, height));
    stackpanel.add(listScrollPane);
    
    
    JPanel container = new JPanel();
    container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
    container.add(gridpanel);
    container.add(stackpanel);
    
    frame.add(container);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

我会放更少和更紧凑的代码,但老实说我不知道​​问题出在哪里。

问题是 JList stacklist 中的项目没有显示。它看起来像这样:JList
(来源:mediafire.com)
(箭头指向JList)

我已经为此排查了几个小时,我担心这是一件非常明显的事情,会导致我永远放弃编程。

最佳答案

我认为您需要了解 GridLayout 的工作原理...

stackpanel.setLayout(new GridLayout(100, height));

Basic 说,为我创建一个具有 100 行和 height 列数的网格...这是为每个单元格保留空间...

如果我把它改成...

stackpanel.setLayout(new GridLayout(code.length, 1));

我明白了...
codes

但我只是猜测您要实现的目标...

您还应该尽可能避免使用 setPreferredSize

关于java - JList 没有出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22213780/

相关文章:

java - 在 Java 中,有什么理由对只使用一次的字符串使用静态最终变量?

java - 在Java中将字符串(如testing123)转换为二进制

java - 我应该为此动画使用 SwingWorker、线程或递归更新吗?

java - 使用 JScrollPane 将 BufferedImage 添加到 JFrame

java - 我应该如何在 JLabel 下面添加 JButtons 的 GridLayout?

java - 添加到 JFrame 时 JPanel 不显示

java - Cordova PhoneGap Android 回调与数据

java - 在 mysql 的 SELECT 查询中使用 JTextBox 的值

java - JLabel 中的可点击词

java - 如何在JTable中实现水平滚动