2016-12-03 73 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'變量中的內容來編輯 –

相關問題