Метод showMessageDialog(Component, Object) в типе JOptionPane не применим для аргументов (новый ActionListener(){}, String)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class GUIClass extends JFrame {


    public static void main (String[] args){
        // TODO Auto-generated method stub
        JFrame fm = new JFrame();
        final JTextField tf = new JTextField();
        JButton butn = new JButton("Click ME");      
        tf.setBounds(50, 20, 130, 40);
        butn.setBounds(50, 80, 120, 30);
        butn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            JOptionPane.showMessageDialog(this, tf.getText());
        }
        });
        fm.add(tf);
        fm.add(butn);
        fm.setLayout(null);
        fm.setVisible(true);
        fm.setSize(400, 300);

    }

}

2 ответа

Решение

Так что проблема заключается в...

butn.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        JOptionPane.showMessageDialog(this, tf.getText());
    }
});

thisв этом контексте относится к анонимному экземпляру ActionListener, а не родительский класс.

Простым решением может быть использование JOptionPane.showMessageDialog(tf, tf.getText());

JOptionPane.showMessageDialog(this, tf.getText());

"this" относится к ActionListener.

Вы хотите, чтобы фрейм был родителем панели опций:

JOptionPane.showMessageDialog(fm, tf.getText());
Другие вопросы по тегам