有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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中切换。 一切都很好,但我想不出国家名称如何正确地出现在标签中

关于我如何做到这一点有什么建议吗

谢谢

更新


共 (2) 个答案

  1. # 1 楼答案

    setName用于组件的内部标识。想象一下你已经得到了一个组件列表,你所知道的就是你需要找到一个具有某种唯一标识符的组件,该标识符是通过name属性提供的。它对组件的输出没有影响

    您需要使用setText方法来更改屏幕上显示的内容

    下一个问题是setText是替换方法。也就是说,它将用新值替换以前应用的值。可能需要做的是为要显示的值构建一个临时的String,然后将该值应用于标签,例如

    StringBuilder sb = new StringBuilder(64);
    for (i = 0; i < indices.length; i++) {
        if (sb.length() > 0) {
            sb.append(", ");
        }
        sb.append(countries[indices[i]]);
    }        
    countryLabel.setText(sb.toString());
    
  2. # 2 楼答案

    要在JLabel上设置文本,请使用countryLabel.setText而不是countryLabel.setName。另一个问题是,在发布的代码中countryLabel没有添加到帧中。我假设它应该进入labelpanel,但是这部分被注释掉了

    其他一些意见:

    不要混合轻重量和重重量组件。见Mixing Heavyweight and Lightweight Components。使用JScrollPane代替滚动窗格,例如:

    JScrollPane listpanel = new JScrollPane(jlst);
    

    另外,在JLabel上设置文本时,不需要revalidate()容器。标签将作为setText()方法的结果刷新