0

我在这里尝试做的是,每次我按下按钮并选择图像时,标签的文本都会更改为该图像的路径。

这是我的代码:

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因此我无法更改文本。

4

2 回答 2

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);       
于 2013-05-06T18:05:30.713 回答
0

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

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

于 2013-05-06T19:54:24.677 回答