请参阅JPanel操作列表器中的类

时间:2015-10-12 19:37:45

标签: java swing jframe jpanel this

我试图在动作侦听器中的方法中引用我的类,所以我可以通过该方法传递它。我的代码看起来像这样:

我的主面板类:

public class MainPanel extends JPanel{    

private JButton submitButton;
JTextArea consoleOutput;

public MainPanel(){

    Border border = BorderFactory.createLineBorder(Color.LIGHT_GRAY);
    setLayout(null);
    setBackground(Color.WHITE);
    Font f1 = new Font("Arial", Font.PLAIN, 14);

    submitButton = new JButton("Get Cards");
    submitButton.setBounds(35, 285, 107, 49);
    submitButton.setFont(f1);

    consoleOutput = new JTextArea();
    consoleOutput.setBounds(199, 122, 375 , 210);
    consoleOutput.setBorder(BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(3, 4, 0, 0)));
    consoleOutput.setEditable(false);
    consoleOutput.setFont(f1);

    submitButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            String username;
            String password;
            Cards cards = new Cards();
            cards.openTabs(username, password, this); //THIS IS THE METHOD IM TRYING TO PASS THE CLASS INTO
            }

        });
        add(submitButton);
        add(consoleOutput);
    }   
}

我的卡类:

public class Cards{

    public void openTabs(String username, String password, MainPanel panel){
        panel.consoleOutput.setText(username + ", " + password);
    }   

在eclipse中它强调了我的MainPanel中的方法,这就是问题或错误:

The method openTabs(String, String, MainPanel) in the type Cards is not applicable for the arguments (String, String, new ActionListener(){})   

我该怎么办?我应该传递什么,而不是因为它似乎没有工作。我迷路了,不知道该怎么做,感谢任何帮助!!

1 个答案:

答案 0 :(得分:2)

您的问题是您在匿名内部类中使用 this 。换句话说:此this不具有this的通常含义 - 它没有引用"外部" MainPanel对象,但内部ActionListener对象!

您必须改为使用MainPanel.this