java - 将 JScrollList 更改为 JList 的布局

标签 java user-interface jscrollpane jlist

我正在尝试在java中创建一个GUI,其中包含JComboBox和JList,其内容根据JComboBox中的所选项目而变化。

我想向 JList 添加一个 scroolPane。我将向您展示代码和图像来澄清问题:

JPanel listPanel = new JPanel();

Hashtable<String, String[]> subItems = new Hashtable<String, String[]>();
JComboBox<String> tendina;
JList<String> subList;

GridBagConstraints c;

String ricevuti[] = {"Alex", "Ben", "Claire", "Dana", "Ellen", "Felicia", "Gary", "Hailey", "Imogen", "Jay", "Kate", "Alex", "Ben", "Claire", "Dana", "Ellen", "Felicia", "Gary", "Hailey", "Imogen", "Jay", "Kate"};
JList ricList = new JList(ricevuti);

String inviati[] = {"Lara", "Megan", "Nikole", "Oscar", "Paige", "Quentin", "Ralph", "Sara", "Thelma", "Victoria", "William"};
JList invList = new JList(inviati);

String ricInv[] = {"Seleziona un item..", "Ricevuti", "Inviati"};

Inbox() {

    //...

    listPanel.setLayout(new GridBagLayout()); 
    listPanel.setBackground(Color.BLUE);

    /*** ComboBox ***/
    tendina = new JComboBox<String>(ricInv);
    tendina.addActionListener(this);
    tendina.setEditable(false);
    c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridwidth = 1;
    c.gridx = 0;
    c.gridy = 0;
    c.insets = new Insets(-295, 10, 0, 0); //top, left, bottom, right
    c.weightx = 1;
    listPanel.add(tendina, c);

    /*** Lista ***/
    subList = new JList<String>();
    subList.setPreferredSize(new Dimension(80, 280)); 
    subList.setVisibleRowCount(10);
    subList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JScrollPane scrollList = new JScrollPane(subList);
    subItems.put(ricInv[1], ricevuti);
    subItems.put(ricInv[2], inviati);
    c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridwidth = 1;
    c.gridx = 0;
    c.gridy = 0;
    c.insets = new Insets(30, 10, 0, 0); //top, left, bottom, right
    c.weightx = 1;
    **[1]**listPanel.add(subList, c);
    **[2]**listPanel.add(scrollList, c);

    //...

}

问题是当我将scrollList[2]添加到listPanel时,布局困惑了。 如果我将子列表[1]添加到listPanel,那么布局是正确的,但显然我没有scrollList。

如何在不更改布局的情况下添加滚动列表?

如果我将 subList 添加到 listPanel[1],就会发生以下情况: http://www.mediafire.com/view/daye4rkx1tyhwbq/sublist.png

如果我将scrollList添加到listPanel[2],就会发生以下情况: http://www.mediafire.com/view/jfiky6j686e2h58/scroll.png

谢谢

<小时/>

关于高度,我意识到问题取决于subList.setVisibleRowCount(16);

但是如何调整宽度呢?

最佳答案

这不是我在上一篇文章中给您的建议:http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html

包含 JList 的 JScrollPane 应从一开始就使用您所需的布局添加到您的 GUI 中。

然后您只需使用 setModel(...) 方法更改 JList 中的数据即可。

关于java - 将 JScrollList 更改为 JList 的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23585903/

相关文章:

Java MySQL事务和executeBatch

android - 关于如何自定义 Android 用户界面的教程

java - Swing JScrollPane 调整大小以适合视口(viewport)面板

Java Swing GridBagLayout 在其他组件之间添加组件

java - 改造 POST 向服务器发送错误的值

java - Android Studio 无法解析 fragmentActivity 和 ViewPager 导入

user-interface - Rust egui 窗口大小和暗模式

java - 实现椭圆之间的折线连接

java - 在 JScrollPane 中调用 setViewportView 后避免自动滚动到底部

java - Netbeans OutOfMemoryError : Java heap space, 代码格式化