我得到了一个JList
,其中包含了确定类型。用户可以通过从组合框中选择测量类型来填充它并填充列表。我还有5个特征单选按钮,这些按钮通常会设置测量的特征,因此对于每种测量类型,都有5个不同的选项。
我绘制了一个窗口的示意图:
+-------------+
|Mesuretype1 |
|Mesuretype2 |
|Mesuretype3 |
+-------------+
°option 1 °option 2 °option 3 °option 4
这是可能的,并且有一种方法可以将列表与单选按钮相关联并保存它们的状态(例如第一个选项只有选项1,第二个选项只有3个,例如...)?
要完成程序,请在选择了不同的度量和相关选项后,用户单击“完成”,所有数据将保存到数据库中。
我使用Java Swing。
答案 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);
}
}
和屏幕截图: