frame add对另一个java文件不起作用

时间:2016-10-01 18:16:55

标签: java swing jframe

test.java

import javax.swing.JFrame;

public class test {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setVisible(true);
        frame.setSize(600, 600);

    }

}

我的其他java文件test2.java

import javax.swing.JButton;

public class test2 {

    public static void main(String[] args) {
        JButton Button = new JButton();
        frame.add(Button);

    }

}

我正在尝试将帧调用到test2.java

2 个答案:

答案 0 :(得分:1)

您遇到此问题的原因:

运行java应用程序时,将调用应用程序的main函数。因此,每个应用程序实际上只应该有一个main函数。

在您的方案中,您有2个main个功能。将此视为2种不同的应用程序。发生了以下情况:

  • 运行Test类时,您的应用程序正在创建一个新的JFrame对象。几乎就是这样,它就在那里结束了。它不知道Test2类存在。

  • 运行Test2类时,您的应用程序正在创建一个新的JButton对象。 虽然,但您的Test2类没有引用框架变量(这就是您收到错误的原因)。它甚至不知道有一个Test类。


为了解决您的问题,请尝试以下方法:

<强> Test.java

public class Test
{
     public static void main(String[] args)
     {
        JFrame frame = new JFrame();
        frame.setVisible(true);
        frame.setSize(600, 600);

        // By passing the frame as a reference, the function
        // will be able to add the button to this frame.
        Test2.addButton(frame);
    }
}

<强> Test2.java

public class Test2
{
    public static void addButton(JFrame frame)
    {
        JButton button = new JButton();
        frame.add(button);
    }
}

更多OOP方法:

在这里,我创建了一个Driver类,可以将Test2MyFrame类连接在一起。

<强> Driver.java

public class Driver
{
    public static void main(String[] args)
    {
        MyFrame frame = new MyFrame();
        Test2.addButton(frame);
    }
}

<强> MyFrame.java

public class MyFrame extends JFrame
{
    public MyFrame()
    {
        this.setSize(600, 600);
        this.setVisible(true);
    }
}

<强> Test2.java

public class Test2
{
    public static void addButton(JFrame frame)
    {
        JButton button = new JButton();
        frame.add(button);
    }
}

答案 1 :(得分:-1)

我假设您正在尝试将Button添加到您在frame中创建的JFrame test中。为此,您需要制作frame这本质上是全局范围的可见内容,如下:

import javax.swing.JFrame;
public class test {
    public static JFrame frame;
    public static void main(String[] args) {
        frame = new JFrame();
        frame.setVisible(true);
        frame.setSize(600, 600);
        test2.main(args)
    }
}

然后,要在test2中添加按钮,您需要按名称访问test

import javax.swing.JButton;
public class test2 {
    public static void main(String[] args) {
        JButton Button = new JButton();
        test.frame.add(Button);
    }
}