class 中的 JButton 和主要的 actionlistener

JButton in the class and actionlistener on the main

我是 Java 编程新手。我想在 class 中创建 JButton 并通过传递按钮参数在主体中创建 ActionListener 。但它抛出一个错误:

Cannot make a static reference to the non-static field newBtn

我的代码如下。

import java.awt.event.*;  
import javax.swing.*;    
public class TestBtn { 

TestBtn() {
}

public void myBtn(JButton mybtn){   
    JFrame f=new JFrame("My Example");   

    mybtn =new JButton("Click Here");  
    mybtn.setBounds(50,100,95,30);  

    f.add(mybtn);  
    f.setSize(400,400);  
    f.setLayout(null);  
    f.setVisible(true);   
} 
}

// 我的主程序

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;  
public class TestBtnMain {
    JButton newBtn; 

public static void main(String[] args) {
    TestBtn btn = new TestBtn();
    btn.myBtn(newBtn);

    newBtn.addActionListener(new ActionListener(){  
        public void actionPerformed(ActionEvent e){  
            System.out.println("Success");
            }  
        });
}
}

您正在使用变量 newBtn,但没有使用任何对象。它是一个实例变量,因此需要一个对象才能访问。

应更改此声明

btn.myBtn(newBtn);

使用 class TestBtnMain 的实例访问 newBtn

或者您可以使 newBtn 静态。

static JButton newBtn;

与 C++ 不同 Java 无法通过引用传递参数。所以我会改变你的代码如下:

import java.awt.event.*;  
import javax.swing.*;    
public class TestBtn { 

    TestBtn() {

    }
    public JButton myBtn(){   

        JFrame f=new JFrame("My Example");   

        JButton mybtn =new JButton("Click Here");  
        mybtn.setBounds(50,100,95,30);  

        f.add(mybtn);  
        f.setSize(400,400);  
        f.setLayout(null);  
        f.setVisible(true);   
        return mybtn;
    } 

}

主要class:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;  
public class TestBtnMain {

    public static void main(String[] args) {
        TestBtn btn = new TestBtn();
        JButton newBtn = btn.myBtn();

        newBtn.addActionListener(new ActionListener(){  
            public void actionPerformed(ActionEvent e){  
                System.out.println("Success");
            }  
        });


    }
}

而且,正如 Andrew Thompson 已经提到的,您应该使用布局管理器让您的 UI 使用不同的 platforms/screen 分辨率

您的 TestBtn class 应该是:

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

public class TestBtn { 
  private JFrame f;
  private JButton mybtn;

TestBtn() {
       f=new JFrame("My Example");
       mybtn =new JButton("Click Here"); 
}

public void myBtn(){   

    mybtn.setBounds(50,100,95,30);  
    mybtn.addActionListener(new ActionListener(){  
        public void actionPerformed(ActionEvent e){  
           System.out.println("Success");
        }  
    });

    f.add(mybtn);  
    f.setSize(400,400);  
    f.setLayout(null);  
    f.setVisible(true);   
  } 
}

你的主要功能:

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

public class TestBtnMain {

  public static void main(String[] args) {
      TestBtn btn = new TestBtn();
      btn.myBtn();
  }
}