将JList与单选按钮关联

时间:2019-01-03 14:22:05

标签: java swing jlist jradiobutton

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

我绘制了一个窗口的示意图:

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

这是可能的,并且有一种方法可以将列表与单选按钮相关联并保存它们的状态(例如第一个选项只有选项1,第二个选项只有3个,例如...)?

要完成程序,请在选择了不同的度量和相关选项后,用户单击“完成”,所有数据将保存到数据库中。

我使用Java Swing。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我个人不建议为此使用JList

JPanel内使用JScrollPane。该面板可以设置为new GridLayout(0, 1),然后根据需要添加几乎任意数量的面板,每个面板将保留 mesure 类型名称和该单选按钮。测量。这样,您可以水平滚动(如果 mesure 的单选按钮太多)或垂直滚动​​(如果 mesures 的太多),但是这种方式还可以帮助您保持每个 mesure 的状态(通过保留对其单选按钮的引用)。

JList相比,您可能不得不添加MouseListener来定位用户选择的单选按钮,或者与JList的UI混淆。

遵循示例代码:

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);
    }
}

和屏幕截图:

Panel simulating JList