使用变量调用Jlable来调用它?

时间:2016-12-03 02:59:45

标签: java eclipse swing jlabel

我正在编写一些代码,我希望尽可能灵活,所以我使用了很多变量,并且我有一个名为username的字符串变量。我也有一些Jlabel与可能进入username变量的任何名称相同。如何更改与username变量中的字符串对应的Jlabel的启用状态?

编辑:为了澄清一下,我有一个散列图,其中包含我想要从用户接受的ID的密钥。这些键指向具有name(字符串)和status(布尔)变量的对象。对于每个进入hashmap的条目,我将添加一个Jlabel来保存该人的照片。 Jlabels名称将对应于对象中的name

编辑:首先它检查hashmap以查看输入的数字是否与hashmap中的一个键匹配。如果是,则将name从该对象复制到username,然后检查对象的状态。如果status为false(默认),我希望它将与username同名的Jlabel更改为启用。如果status为真,则更改为禁用。请记住,我将不得不在以后使用大量对象和Jlabel进行扩展。

我的问题是我无法告诉java哪个Jlabel在不使用大量IF语句的情况下进行更改。

我在想这样的事情,但它会返回一个编译器错误:“方法setEnabled(boolean)未定义类型String”

username.setEnabled(true);

1 个答案:

答案 0 :(得分:0)

目前您使用的是HashMap<String, boolean>,但您确实应该使用HashMap<String, JLabel>,因为您可以直接在isEnabled()上使用setEnabled(boolean b)JLabels附加到String个ID。由以下示例中的代码段演示:

HashMap<String, JLabel> yourMap = new HashMap<>();
// ...
yourMap.get(id).setEnabled(!yourMap.get(id).isEnabled());

12345中输入54321JTextField,然后按Enter键以切换是否启用了两个JLabel

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

class Test {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                final JFrame frame = new JFrame("JLabel Text Example");

                final HashMap<String, JLabel> yourMap = new HashMap<>();
                yourMap.put("12345", new JLabel("Example Text"));
                yourMap.put("54321", new JLabel("Other Text"));

                final JTextField input = new JTextField(5);
                input.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        String text = input.getText();
                        if(yourMap.get(text) != null) {
                            yourMap.get(text).setEnabled(!yourMap.get(text).isEnabled());
                        }
                    }

                });

                final JPanel labels = new JPanel();
                labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
                for(JLabel label : yourMap.values()) {
                    labels.add(label);
                }

                frame.getContentPane().add(input);
                frame.getContentPane().add(labels, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationByPlatform(true);
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }

        });
    }

}