类中的JButton和main上的actionlistener

时间:2017-04-06 06:23:11

标签: java swing jbutton actionlistener

我是Java编程的新手。我想在类中创建JButton并通过传递按钮参数在main中创建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");
            }  
        });
}
}

3 个答案:

答案 0 :(得分:2)

与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;
    } 

}

主要课程:

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使用不同的平台/屏幕分辨率

答案 1 :(得分:0)

您正在使用变量newBtn而不使用任何对象。它是一个实例变量,因此需要访问一个对象。

应该更改此声明

btn.myBtn(newBtn);

使用班级TestBtnMain的实例访问newBtn

或者您可以newBtn静态。

static JButton newBtn;

答案 2 :(得分:0)

您的TestBtn类应该是:

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();
  }
}