首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将JList与单选按钮关联

将JList与单选按钮关联
EN

Stack Overflow用户
提问于 2019-01-03 22:22:05
回答 2查看 421关注 0票数 0

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

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

代码语言:javascript
复制
+-------------+
|Mesuretype1  |
|Mesuretype2  |
|Mesuretype3  |
+-------------+
°option 1 °option 2 °option 3 °option 4

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

为了结束程序,在选择了不同的度量和相关的选项后,用户单击finish,所有数据都保存到数据库中。

我使用Java Swing。

EN

回答 2

Stack Overflow用户

发布于 2019-12-28 02:49:16

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

JScrollPane中使用JPanel。该面板可以有一个new GridLayout(0, 1)集,然后添加几乎您想要的任意多个面板,其中每个面板都将包含度量类型名称和该度量的单选按钮。这样你就可以水平滚动(如果一个尺寸有太多的单选按钮)或垂直滚动(如果有太多的尺寸),但这种方式也可以帮助你保持每个尺寸的状态(通过保持对其单选按钮的引用)。

JList方法相比,您可能需要添加一个MouseListener来定位用户选择的单选按钮,或者扰乱JList的UI。

以下是示例代码:

代码语言:javascript
复制
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);
    }
}

和屏幕截图:

票数 1
EN

Stack Overflow用户

发布于 2019-01-04 03:40:30

从你的问题中,我收集到的最多的是,你想要一种方法来将一个"MesureType“与单选按钮中的一个选项联系起来。

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

新地图= HashMap HashMap();map.put(您的list.getSelectedValue(),选中的按钮值);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54024180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档