我正在动态生成名称框,滑块和标签的列表,并试图找出如何访问滑块的值并更改标签。其他帖子建议使用数组,但我不知道从哪里开始。
我的代码是这样的:
public Tailoring(int n) {
/*initComponents();*/
JPanel containerPanel = new JPanel();
containerPanel.setLayout(new BoxLayout(containerPanel, BoxLayout.PAGE_AXIS));
this.add(containerPanel);
JLabel Title = new JLabel("Tailoring:");
containerPanel.add(Title);
for(int i = 0; i < n; i++){
JPanel rowPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JTextField NameBox = new JTextField("Guest " + (i+1));
JSlider TipSlider = new JSlider();
JLabel TipCost = new JLabel();
rowPanel.add(NameBox);
rowPanel.add(TipSlider);
rowPanel.add(TipCost);
containerPanel.add(rowPanel);
}
}
答案 0 :(得分:1)
您可以创建一个扩展JPanel的新类YourPanel
。
而不是声明
JPanel rowPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
你可以使用
YourPanel rowPanel = new YourPanel(new FlowLayout(FlowLayout.LEFT));
将textfield,slider和label定义为此YourPanel
类的属性。
为每个字段提供 getters / setters 。然后在应用程序中使用YourPanel对象的数组或ArrayList。您可以通过以下调用访问 n th 面板的标签:
panels.get(n).getJLabel();
答案 1 :(得分:0)
在修改关联的JSlider时,您似乎想要更改JLabel中显示的值,正确?在Java中关联对象对象的最佳方法是使用 Map 结构:
Map<Component, JSlider> sliderToLabel = new HashMap<Component, JSlider>();
for (int i = 0; i < n; i++) {
// after your loop code
sliderToLabel.put(TipSlider, TipCost); // map the slider to its label
}
您将能够在侦听该组件更改的代码中获取对JSlider的引用。
JLabel updateLabel = sliderToLabel.get(targetedSlider);
updateLabel.setText("updated text");
备注强>