我得到了一个用mesure类型填充的JList
。用户可以通过从组合框中选择mesure类型并填充列表来填充它。我还有5个特征单选按钮,通常设置测量的特征,所以对于每个测量类型,有5个不同的选项。
我画了一个窗口的示意图:
+-------------+
|Mesuretype1 |
|Mesuretype2 |
|Mesuretype3 |
+-------------+
°option 1 °option 2 °option 3 °option 4
这是可能的吗?有没有一种方法可以将列表与单选按钮相关联,并保存它们的状态(就像第一个度量只有选项1,第二个度量只有选项3,e...)?
为了结束程序,在选择了不同的度量和相关的选项后,用户单击finish,所有数据都保存到数据库中。
我使用Java Swing。
发布于 2019-12-28 02:49:16
就我个人而言,我建议不要为此使用JList
。
在JScrollPane
中使用JPanel
。该面板可以有一个new GridLayout(0, 1)
集,然后添加几乎您想要的任意多个面板,其中每个面板都将包含度量类型名称和该度量的单选按钮。这样你就可以水平滚动(如果一个尺寸有太多的单选按钮)或垂直滚动(如果有太多的尺寸),但这种方式也可以帮助你保持每个尺寸的状态(通过保持对其单选按钮的引用)。
与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);
}
}
和屏幕截图:
发布于 2019-01-04 03:40:30
从你的问题中,我收集到的最多的是,你想要一种方法来将一个"MesureType“与单选按钮中的一个选项联系起来。
通过利用the Hashmap util,您可以将这两者映射在一起,以便MesureType与来自单选按钮的选择相关联。例如:
新地图= HashMap HashMap();map.put(您的list.getSelectedValue(),选中的按钮值);
https://stackoverflow.com/questions/54024180
复制相似问题