帧中添加不起作用到另一个Java文件
问题描述:
test.java帧中添加不起作用到另一个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
答
原因你得到这个问题访问
原因你得到这个问题访问test
:
当你运行一个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
类,将在Test2
和MyFrame
类连接在一起。
驱动程序。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);
}
}
答
我假设您正在尝试将Button
添加到您在test
中创建的JFrame frame
为此,您需要使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
添加按钮,您需要通过名称
import javax.swing.JButton;
public class test2 {
public static void main(String[] args) {
JButton Button = new JButton();
test.frame.add(Button);
}
}
您需要延长'test'作为'公共类测试扩展的JFrame {'和在使用它之前创建一个'test2'的实例:'test frame = new test()'。 –
1)请参阅[检测/修复代码块的悬挂紧支架](http://meta.stackexchange.com/q/251795/155831),以解决问题,我不再担心修复问题。 2)请学习常用的Java命名规则(命名约定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute',除非它是'UPPER_CASE_CONSTANT')并且一致地使用它。 –