2013-05-06 54 views
0

我在這裏要做的是每次按下按鈕並選擇一個圖像時,標籤的文本都會變爲該圖像的路徑。更改在ActionListener後聲明的標籤文本

這裏是我的代碼:

public Frame() { 
    setAlwaysOnTop(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 640, 480); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    JButton btnNewButton = new JButton("Select image"); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) 
     { 
      FileNameExtensionFilter filter = new FileNameExtensionFilter("Image", "jpg", "jpeg"); 
      final JFileChooser fc = new JFileChooser(); 
      filec.setAcceptAllFileFilterUsed(false); 
      filec.addChoosableFileFilter(filter); 
      filecc.showDialog(Frame.this, "Select an image"); 
      File pathh = fc.getSelectedFile(); 
      String pathhs; 
      pathhs = pathh.getPath(); 
      System.out.println("The path is: " + pathhs); 
      lblNewLabel.setText(pathhs) <--the problem 

     } 
    }); 
    btnNewButton.setBounds(25, 408, 165, 23); 
    contentPane.add(btnNewButton); 


    JLabel lblNewLabel = new JLabel("New label"); 
    lblNewLabel.setForeground(Color.BLACK); 
    lblNewLabel.setBackground(Color.BLUE); 
    lblNewLabel.setBounds(10, 68, 266, 234); 
    contentPane.add(lblNewLabel);  
} 

的問題是在這裏:

   String pathhs; 
       pathhs = pathh.getPath(); 
       System.out.println("The path is: " + pathhs); 
       lblNewLabel.setText(pathhs) <--the problem 

我沒有訪問變量lblNewLabel所以我不能更改文本。

+0

您需要在**之前創建一個標籤**,您可以更改它。 – 2013-05-06 18:04:46

+3

停止使用'setBounds'並開始使用佈局管理器 – Reimeus 2013-05-06 18:06:17

回答

1

只要已經在定義匿名類之前用final修飾符聲明瞭匿名類,就可以引用局部變量。

所以,我想修改代碼以類似:

JButton btnNewButton = new JButton("Select image"); 
btnNewButton.setBounds(25, 408, 165, 23); 
contentPane.add(btnNewButton); 


final JLabel lblNewLabel = new JLabel("New label"); 
btnNewButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) 
    { 
     // Your actionPerformed implementation... 
    } 
}); 

lblNewLabel.setForeground(Color.BLACK); 
lblNewLabel.setBackground(Color.BLUE); 
lblNewLabel.setBounds(10, 68, 266, 234); 
contentPane.add(lblNewLabel);  
0

我沒有訪問變量lblNewLabel所以我不能更改文本。

將標籤定義爲類變量而不是局部變量,則匿名內部類可以訪問該變量。

+0

謝謝所有特別的camickr。 我所要做的只是: final JLabel lblNewLabel = new JLabel(「New label」); – 2013-05-06 22:16:53