Java JPanel JFrame独立类
我是一名Java初学者,刚开始为我的程序制作GUI,我被困在Java JPanel JFrame独立类,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我是一名Java初学者,刚开始为我的程序制作GUI,我被困在JFrames和JPanels上。我的目标是制作一个包含多个JPanel的JFrame,每个JPanel都有自己的类 我已经有了一个开始,但我似乎无法让它发挥作用。我的代码如下: 这是JFrame类: import javax.swing.*; import java.awt.*; public class TestFrame extends JFrame{ private static final long serialV
JFrames
和JPanels
上。我的目标是制作一个包含多个JPanel
的JFrame
,每个JPanel
都有自己的类
我已经有了一个开始,但我似乎无法让它发挥作用。我的代码如下:
这是JFrame类:
import javax.swing.*;
import java.awt.*;
public class TestFrame extends JFrame{
private static final long serialVersionUID = 1L;
private JFrame f;
public TestFrame(){
f = new JFrame("Test");
f.setVisible(true);
f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new TestPanel();
p.setVisible(true);
f.add(p);
}
public static void main(String[] args){
new TestFrame();
}
}
这是JPanel类:
import javax.swing.*;
import java.awt.*;
public class TestPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JButton b;
private JTextField t;
public TestPanel(){
b = new JButton("bla");
t = new JTextField("blaadda");
add(b);
add(t);
setVisible(true);
}
}
您应该将
setVisible
作为TestFrame
构造函数中的最后一个方法:
f.setVisible(true);
此外,无需对您的JPanel
进行调用,因为当框架自身可见时,它将使其所有子组件可见:
p.setVisible(true);
所以这条线可以被移除
还有
TestFrame
扩展JFrame
。这将创建两个帧,其中一个永远不会显示。在构造函数中创建框架就足够了。您应该在TestFrame
构造函数中使用setVisible
作为最后一个方法:
f.setVisible(true);
此外,无需对您的JPanel
进行调用,因为当框架自身可见时,它将使其所有子组件可见:
p.setVisible(true);
所以这条线可以被移除
还有
TestFrame
扩展JFrame
。这将创建两个帧,其中一个永远不会显示。在构造函数中创建框架就足够了。您的构造函数不应该创建新的JFrame。您将使用类(TestFrame
)来创建窗口,而不是JFrame类。您可能还有其他错误,但最明显的错误是
public TestFrame(){
f = new JFrame("Test");
f.setVisible(true);
f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new TestPanel();
p.setVisible(true);
f.add(p);
}
应该是
public TestFrame(){
//Don't create a new JFrame, you're already creating a TestFrame!
//call all methods on the TestFrame, not the JFrame
setVisible(true);
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new TestPanel();
p.setVisible(true);
add(p);
}
您的测试面板构造函数看起来不错。但是,我建议在TestFrame字段中创建任何面板,而不是在构造函数中创建临时变量
然后按如下方式创建窗口:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TestFrame();
}
}
最后,如果所有其他操作都失败,请尝试在构造函数中调用setEnabled(true)
希望这些都能有所帮助,我已经离开了Swing,开始使用OpenGL,但我记得这是多么令人沮丧。您的构造函数不应该创建新的JFrame。您将使用类(
TestFrame
)来创建窗口,而不是JFrame类。您可能还有其他错误,但最明显的错误是
public TestFrame(){
f = new JFrame("Test");
f.setVisible(true);
f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new TestPanel();
p.setVisible(true);
f.add(p);
}
f.add(p);
p.repaint();
p.revalidate();
应该是
public TestFrame(){
//Don't create a new JFrame, you're already creating a TestFrame!
//call all methods on the TestFrame, not the JFrame
setVisible(true);
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new TestPanel();
p.setVisible(true);
add(p);
}
您的测试面板构造函数看起来不错。但是,我建议在TestFrame字段中创建任何面板,而不是在构造函数中创建临时变量
然后按如下方式创建窗口:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TestFrame();
}
}
最后,如果所有其他操作都失败,请尝试在构造函数中调用setEnabled(true)
希望这些都能有所帮助,我已经离开Swing,开始使用OpenGL,但我记得这是多么令人沮丧。您应该为这个答案添加上下文;为什么它能解决所提出的问题?你应该给这个答案添加上下文;为什么它能解决上述问题?
f.add(p);
p.repaint();
p.revalidate();