2016-12-03 38 views
0

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

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

编辑:所以首先它检查散列表,看看输入的数字是否与散列表中的某个键匹配。如果它从该对象复制nameusername然后检查对象的状态。如果status为假(默认),我希望它将名称与username相同的Jlabel更改为启用。如果status为true,则更改为禁用。请记住,我将不得不在稍后使用很多对象和J标记来扩展它。

我的问题是我不能告诉java哪些Jlabel改变,而不使用大量的IF语句。

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

username.setEnabled(true); 

回答

0

现在你使用的是HashMap<String, boolean>,但你真的应该使用HashMap<String, JLabel>,因为您可以直接在连接到String ID的JLabels上使用isEnabled()setEnabled(boolean b)。通过此代码段从下面的例子证明:

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

输入1234554321JTextField,然后按回车键切换如果两个JLabel s的启用与否:

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); 
      } 

     }); 
    } 

} 
+0

这不是一个如果即时消息只使用1个JLabel,但是我需要为我的哈希映射中的每个对象都有1个Jlabel,那么就不好解决。我可能应该解释得更好一些,所以用户输入一个ID号码到文本框中,它将字符串转换为一个整数,然后检查该整数是否与我的哈希映射中的任何键匹配。如果这样做,然后检查我为与该键相对应的对象所做的状态变量。如果状态为false(默认),我想将其设置为true,反之亦然。每个对象将与包含图片的Jlabel配对。感谢您的帮助。 –

+0

感谢您澄清,但这应该是对您的问题的编辑。 – MasterBlaster

+0

我想告诉java哪个Jlabel要根据'username'变量中的内容来编辑 –

相关问题