【问题标题】:Associate a JList with radio buttons将 JList 与单选按钮相关联
【发布时间】:2019-01-03 14:22:04
【问题描述】:

我得到了一个JList,我用测量类型填充了它。用户可以通过从组合框中选择测量类型并填充列表来填充它。我还有 5 个特性单选按钮,它们通常设置测量的特性,因此对于每个测量类型,有 5 个不同的选项。

我画了一个窗口的示意图:

+-------------+
|Mesuretype1  |
|Mesuretype2  |
|Mesuretype3  |
+-------------+
°option 1 °option 2 °option 3 °option 4

这可能吗,有没有办法将列表与单选按钮相关联,并保存它们的状态(如第一个测量只有选项 1,第二个选项 3,e...)?

为了完成程序,在选择了不同的方法和相关的选项后,用户点击完成,所有数据都保存到数据库中。

我使用 Java Swing。

【问题讨论】:

  • “测量类型” DYM“测量类型”?第二个我不明白,但至于第一个,我以前什至没有听过'mesure'这个词。

标签: java swing jlist jradiobutton


【解决方案1】:

就个人而言,我建议不要为此使用JList

JScrollPane 中使用JPanel。该面板可以设置new GridLayout(0, 1),然后添加几乎任意数量的面板,每个面板都将保存 mesure 类型名称和该 mesure。通过这种方式,您可以水平滚动(如果 mesure 的单选按钮太多)或垂直滚动​​(如果 mesure 太多),但这种方式也会对您有所帮助维护每个 mesure 的状态(通过保持对其单选按钮的引用)。

JList 方法相比,您可能不得不添加MouseListener 来定位用户选择的单选按钮,或者弄乱JList 的用户界面。

遵循示例代码:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;

public class Main {
    public static class MesurePanel extends JPanel {
        private final ButtonGroup group;

        public MesurePanel(final String mesure,
                           final String... options) { //Behaves like a "normal" array of options.
            super(new BorderLayout());
            super.add(new JLabel(mesure, JLabel.CENTER), BorderLayout.LINE_START);
            final JPanel lineEnd = new JPanel(); //FlowLayout...
            group = new ButtonGroup();
            for (final String option: options) {
                final JRadioButton radio = new JRadioButton(option);
                group.add(radio);
                lineEnd.add(radio);
            }
            super.add(lineEnd, BorderLayout.CENTER);
        }
    }

    public static void main(final String[] args) {

        final int mesureCount = 10; //Startup setting...

        //Create mesures:
        final ArrayList<String> mesures = new ArrayList<>(mesureCount);
        for (int i = 0; i < mesureCount; ++i)
            mesures.add("MesureType " + (i + 1));

        //Create options for each mesure:
        final JPanel contents = new JPanel(new GridLayout(0, 1)); //1 column, any number of rows...
        mesures.forEach(mesure -> contents.add(new MesurePanel(mesure, "Option 1", "Option 2", "Option N")));

        final JScrollPane scroll = new JScrollPane(contents);
        scroll.setPreferredSize(new Dimension(400, 200));

        final JFrame frame = new JFrame("List of MesureTypes.");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(scroll);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

和截图:

【讨论】:

    【解决方案2】:

    从您的问题来看,我收集的最多的是您想要一种方法将一个“MesureType”与单选按钮中的一个选项相关联。

    通过使用the Hashmap util,您可以将两者映射在一起,以便将 MesureType 与单选按钮的选择相关联。例如:

    HashMap map = new HashMap(); map.put(你的列表.getSelectedValue(),选中的按钮值);

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 2010-11-14
      • 2021-05-21
      • 2011-06-09
      相关资源
      最近更新 更多