Another static / non static problem with Java

OK, use the eclipse IDE and stumble over static / non - static issues I think I understand it, but not completely. It's code

The first part is mainly created using the swing UI builder Edit comments / imports

public class Screen {

private JFrame frame;
public JLabel lblNewLabel;
public static void main(String[] args) {
    EventQueue.invokelater(new Runnable() {
        public void run() {
            try {
                Screen window = new Screen();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public Screen() {
    initialize();
}

void initialize() {
    XListener listenItem = new XListener("Woot"); // creates listen object

    frame = new JFrame();
    frame.setBounds(100,100,450,300);
    frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JLabel lblNewLabel = new JLabel("New label");
    lblNewLabel.setBounds(193,154,56,16);
    frame.getContentPane().add(lblNewLabel);

    JButton btnNewButton = new JButton("New button");
    btnNewButton.setBounds(163,73,97,25);
    frame.getContentPane().add(btnNewButton);
    btnNewButton.addActionListener(listenItem); // attaches it to listen object
}
void changeLabel(String setString) {
    lblNewLabel.setText(setString);
}
}

The second part is the audience class

// creates class for listen item
public class XListener implements ActionListener {
    String foo;
    XListener(String setString) {
        foo = setString;
    }
    public void actionPerformed(ActionEvent btnNewButton) {
        **Screen.changeLabel(foo);**
    }
}

It complains that non - static method changelabel (string) cannot be statically referenced from type screen However, if I use a window instead of a screen, it cannot find an object This makes me very confused The way I understand the code is that the main method creates a screen object called window, and an xlistener object will also be created during initialization Why does it think the actionperformed method is static? I know I lack some basic things, and I've been paying attention to Java 'trail' and haven't got it

Solution

You should pass in a reference to the screen object to be affected when the operation occurs:

// creates class for listen item
public class XListener implements ActionListener {
    String foo;
    Screen myScreen;

    XListener(String setString,Screen scr) {
        foo = setString;
        myScreen = scr;
    }
    public void actionPerformed(ActionEvent btnNewButton) {
        myScreen.changeLabel(foo);
    }
}

Then initialize your listener like this:

XListener listenItem = new XListener("Woot",this);

You have to do this because the changelabel () method is an instance method of the screen class, but you try to access it like a static method By accessing the correct screen instance, you can call this method correctly

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>