【问题标题】:resize problem with JList?调整 JList 的大小问题?
【发布时间】:2009-11-12 07:18:53
【问题描述】:

我在调整 JList 的大小时遇到​​问题... 下面是我的代码...我的要求是将具有一些固定大小的 JList 添加到 Panel 中,当我最大化/最小化 Frame 时,JList 应该相应地增加/减少。请帮助我..如何实现这一点?

以下是设计:

嗨,卡尔, 它适用于简单的情况,但不适用于上述情况。 所以我现在解释上面的代码..

我有一个名为“TestListControl”的框架,采用 GB 布局。 添加具有 GB 布局的 selectDevicesPanel。 在 selectDevicesPanel 中: 添加带有 GB 布局的 selectNamesInnerPanel 在 selectNamesInnerPanel 中: 使用 GB 布局添加 selectNameAddPanel 使用 Flow 布局添加 selectTeamPanel 在 selectNameAddPanel 中: 选择DeviceScrollPane 点击添加删除面板 selectedNameScrollPane 在 selectTeamPanel 中: 选择团队标签 选择团队组合框

public class TestListControl extends javax.swing.JFrame {

    public TestListControl() {
        initComponents();
    }

    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        selectDevicesPanel = new javax.swing.JPanel();
        selectNamesInnerPanel = new javax.swing.JPanel();
        selectNameAddPanel = new javax.swing.JPanel();
        chooseDeviceScrollPane = new javax.swing.JScrollPane();
        chooseNamesList = new javax.swing.JList();
        clickToAddDeletePanel = new javax.swing.JPanel();
        clickToAddButton = new javax.swing.JButton();
        clickToRemoveButton = new javax.swing.JButton();
        selectedNameScrollPane = new javax.swing.JScrollPane();
        selectedNamesList = new javax.swing.JList();
        selectNameLabel = new javax.swing.JLabel();
        selectTeamPanel = new javax.swing.JPanel();
        selectTeamLabel = new javax.swing.JLabel();
        selectTeamComboBox = new javax.swing.JComboBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        selectDevicesPanel.setBorder(javax.swing.BorderFactory
                .createTitledBorder("Member Selection"));
        selectDevicesPanel.setLayout(new java.awt.GridBagLayout());

        selectNamesInnerPanel.setLayout(new java.awt.GridBagLayout());

        selectNameAddPanel.setLayout(new java.awt.GridBagLayout());

        chooseNamesList.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "XXXX", "YYYY", "ZZZZ" };

            public int getSize() {
                return strings.length;
            }

            public Object getElementAt(int i) {
                return strings[i];
            }
        });
        chooseNamesList.setMaximumSize(new java.awt.Dimension(46, 88));
        chooseNamesList.setMinimumSize(new java.awt.Dimension(94, 98));
        chooseDeviceScrollPane.setViewportView(chooseNamesList);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(0, 12, 7, 0);
        selectNameAddPanel.add(chooseDeviceScrollPane, gridBagConstraints);

        clickToAddDeletePanel.setLayout(new java.awt.GridBagLayout());

        clickToAddButton.setText(">>");
        clickToAddDeletePanel.add(clickToAddButton,
                new java.awt.GridBagConstraints());

        clickToRemoveButton.setText("<<");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        clickToAddDeletePanel.add(clickToRemoveButton, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5);
        selectNameAddPanel.add(clickToAddDeletePanel, gridBagConstraints);

        selectedNamesList.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "XXXX", "YYYY" };

            public int getSize() {
                return strings.length;
            }

            public Object getElementAt(int i) {
                return strings[i];
            }
        });
        selectedNamesList.setMinimumSize(new java.awt.Dimension(94, 98));
        selectedNameScrollPane.setViewportView(selectedNamesList);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 0);
        selectNameAddPanel.add(selectedNameScrollPane, gridBagConstraints);

        selectNameLabel.setText("Select Name");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 8, 0);
        selectNameAddPanel.add(selectNameLabel, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        selectNamesInnerPanel.add(selectNameAddPanel, gridBagConstraints);

        selectTeamLabel.setText("Select Team");
        selectTeamPanel.add(selectTeamLabel);

        selectTeamComboBox.setModel(new javax.swing.DefaultComboBoxModel(
                new String[] { "TEAM X", "TEAM Y", "TEAM Z" }));
        selectTeamComboBox
                .addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        selectTeamComboBoxActionPerformed(evt);
                    }
                });
        selectTeamPanel.add(selectTeamComboBox);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        selectNamesInnerPanel.add(selectTeamPanel, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        selectDevicesPanel.add(selectNamesInnerPanel, gridBagConstraints);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(
                getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(
                org.jdesktop.layout.GroupLayout.LEADING).add(0, 400,
                Short.MAX_VALUE).add(
                layout.createParallelGroup(
                        org.jdesktop.layout.GroupLayout.LEADING).add(
                        layout.createSequentialGroup().add(0, 107,
                                Short.MAX_VALUE).add(selectDevicesPanel,
                                org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
                                185,
                                org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(0, 108, Short.MAX_VALUE))));
        layout.setVerticalGroup(layout.createParallelGroup(
                org.jdesktop.layout.GroupLayout.LEADING).add(0, 300,
                Short.MAX_VALUE).add(
                layout.createParallelGroup(
                        org.jdesktop.layout.GroupLayout.LEADING).add(
                        layout.createSequentialGroup().add(0, 39,
                                Short.MAX_VALUE).add(selectDevicesPanel,
                                org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
                                221,
                                org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(0, 40, Short.MAX_VALUE))));

        pack();
    }

    private void selectTeamComboBoxActionPerformed(
            java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TestListControl().setVisible(true);
            }
        });
    }

    private javax.swing.JScrollPane chooseDeviceScrollPane;
    private javax.swing.JList chooseNamesList;
    private javax.swing.JButton clickToAddButton;
    private javax.swing.JPanel clickToAddDeletePanel;
    private javax.swing.JButton clickToRemoveButton;
    private javax.swing.JPanel selectDevicesPanel;
    private javax.swing.JPanel selectNameAddPanel;
    private javax.swing.JLabel selectNameLabel;
    private javax.swing.JPanel selectNamesInnerPanel;
    private javax.swing.JComboBox selectTeamComboBox;
    private javax.swing.JLabel selectTeamLabel;
    private javax.swing.JPanel selectTeamPanel;
    private javax.swing.JScrollPane selectedNameScrollPane;
    private javax.swing.JList selectedNamesList;

}

【问题讨论】:

  • 哪个列表?选择名称列表还是选择名称列表?
  • 当我最大化/最小化框架时,列表框都应该最大化/最小化
  • 这个 GroupLayout 事情并不容易重现您的问题。将您的测试程序减少到实际需要查看问题的一小部分组件会很周到。
  • 你为什么不先阅读其他帖子中的答案。也许你会在那里学到一些你可以在这里应用的东西,
  • 嗨 camickr ..在上一篇文章中我也没有得到正确的线索 .. 仍然是未决的事情。我坚持这两个问题..Camickr 帮助我..

标签: java swing jlist


【解决方案1】:

如果您这样做,您的列表不会变得更大:

chooseNamesList.setMaximumSize(new java.awt.Dimension(46, 88));

【讨论】:

  • 我设置了 chooseNamesList.setMaximumSize(new java.awt.Dimension(146, 188)); .但我仍然遇到这个问题
  • 嗨,Carl .. 你有解决这个问题的方法吗?
  • 正如我所提到的,由于奇异的 GroupLayout 类,我在复制您的程序时遇到了问题。事实上,我很高兴您自己找到了解决方案。
【解决方案2】:

伙计们,我自己解决了这个问题..感谢您的协调..实际上,我犯了一个错误,将 weightx 和 weighty 分配给了同时保存 Jlist 和 JEditor 窗格的父面板...简单地说,我们需要为包含要调整大小的任何组件的所有父容器设置权重参数..

【讨论】:

  • 简单地说,我们需要为所有包含您想要调整大小的组件的父容器设置重量参数......这正是我在您显然解决问题之前 4 小时给您的建议自己的问题。
【解决方案3】:

如果你设置一个原型单元格值,当数据改变时JList不会调整大小。

有关 setPrototypeCellValue(Object) 方法,请参阅 The JList Javadoc page

【讨论】:

    猜你喜欢
    • 2013-03-05
    • 2012-11-16
    • 1970-01-01
    • 2021-09-20
    • 2011-07-05
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多