JLabel中JList中的swing JAVA显示项
public class ListComboBox extends JFrame {
private String MIS = "MULTIPLE_INTERVAL_SELECTION";
private String SIS = "SINGLE_INTERVAL_SELECTION";
private String SS = "SINGLE_SELECTION";
final int COUNTRIES = 9;
private String[] countries = {"Canada", "China", "Denmark",
"France", "Germany", "India", "Norway", "United Kingdom",
"United States of America"};
private JList<String> jlst = new JList<String>(countries);
private JLabel comboLabel = new JLabel("Choose Selection Mode: ");
private JComboBox jcbo = new JComboBox();
//to hold country labels
private JLabel countryLabel = new JLabel();
public static void main(String[] args) {
ListComboBox frame = new ListComboBox();
frame.setSize(400, 200);
frame.setTitle("Exercise 17.14");
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public ListComboBox() {
//Adding selection option to combobox
jcbo.addItem(MIS);
jcbo.addItem(SIS);
jcbo.addItem(SS);
// Register listener combobox
jcbo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getItem() == MIS) {
jlst.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
if (e.getItem() == SIS) {
jlst.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
}
if (e.getItem() == SS) {
jlst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
}
});
//Combobox panel
JPanel combopanel = new JPanel(new FlowLayout());
combopanel.add(comboLabel);
combopanel.add(jcbo);
add(combopanel, BorderLayout.NORTH);
//List panel
JScrollPane listpanel = new JScrollPane(jlst);
add(listpanel, BorderLayout.CENTER);
//Bottom label panel
final JPanel labelpanel = new JPanel();
labelpanel.add(countryLabel);
add(labelpanel, BorderLayout.SOUTH);
//List listener
jlst.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
StringBuilder sb = new StringBuilder(64);
int[] indices = jlst.getSelectedIndices();
int i;
for (i = 0; i < indices.length; i++) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(countries[indices[i]]);
}
countryLabel.setText(sb.toString());
}
});
}
}
你好,我需要你的帮助
我需要代码做的是:使用滚动条将列表中选定的国家/地区名称添加到列表下方的标签中,并在列表中未选中它们时将其删除
列表选择模式可以在顶部的JComboBox中切换。 一切都很好,但我想不出国家名称如何正确地出现在标签中
关于我如何做到这一点有什么建议吗
谢谢
更新
# 1 楼答案
setName
用于组件的内部标识。想象一下你已经得到了一个组件列表,你所知道的就是你需要找到一个具有某种唯一标识符的组件,该标识符是通过name
属性提供的。它对组件的输出没有影响您需要使用
setText
方法来更改屏幕上显示的内容下一个问题是
setText
是替换方法。也就是说,它将用新值替换以前应用的值。可能需要做的是为要显示的值构建一个临时的String
,然后将该值应用于标签,例如# 2 楼答案
要在
JLabel
上设置文本,请使用countryLabel.setText
而不是countryLabel.setName
。另一个问题是,在发布的代码中countryLabel
没有添加到帧中。我假设它应该进入labelpanel
,但是这部分被注释掉了其他一些意见:
不要混合轻重量和重重量组件。见Mixing Heavyweight and Lightweight Components。使用
JScrollPane
代替滚动窗格,例如:另外,在
JLabel
上设置文本时,不需要revalidate()
容器。标签将作为setText()
方法的结果刷新