更改在ActionListener之后声明的标签文本

时间:2013-05-06 18:01:21

标签: java swing awt label 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,因此我无法更改文本。

2 个答案:

答案 0 :(得分: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);       

答案 1 :(得分:0)

  

我无法访问变量lblNewLabel,因此我无法更改文本。

将标签定义为类变量而不是局部变量,然后匿名内部类可以访问变量。