无法在 JPanel 上扩展 class 以在 JFrame class 中显示
Can't get a class extended on JPanel to show within a JFrame class
我正在尝试创建一个模块化的 MVC swing 应用程序。所以我有一个运行代码的 Main
class,一个代表 window 的 Frame
class(扩展 JFrame
),并在其中有一个包含我的 GUI 元素的 class(扩展 JPanel
)。我的目标是当View需要改变的时候能够轻松地update/repaint Panel
class。
但是,正如我现在的代码一样,它运行时没有错误,它打开了一个空框架,但是 JPanel class 中的元素不会显示,我不知道为什么。 - 很可能是一个菜鸟错误,我知道,但我再也看不到了。
所以这是我的主要内容 class:
package mvc;
public class Main {
public static void main(String[] args)
{
new Frame();
}
}
这是 JFrame class
package mvc;
import java.awt.Container;
import javax.swing.JFrame;
public class Frame extends JFrame{
private static int width = 500;
private static int height = 500;
public Frame(){
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container pane = getContentPane();
Panel game = new Panel();
pane.add(game);
pack();
setSize(width, height);
setLocation(100,100);
setVisible(true);
}
}
这是 JPanel
package mvc;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Panel extends JPanel {
private JButton b1;
private JLabel l1;
public Panel(){
Container pane = new JPanel();
b1 = new JButton("Button");
pane.add(b1);
l1 = new JLabel("Label for the button");
pane.add(l1);
}
}
我不确定你为什么要这样做...
public Panel(){
Container pane = new JPanel();
b1 = new JButton("Button");
pane.add(b1);
l1 = new JLabel("Label for the button");
pane.add(l1);
}
但是您没有向任何内容添加 pane
,因此屏幕上没有显示任何内容
只做一些事情会更容易...
public Panel(){
b1 = new JButton("Button");
add(b1);
l1 = new JLabel("Label for the button");
add(l1);
}
您还应该仅在事件调度线程的上下文中创建和修改您的 UI,请查看 Initial Threads 了解更多详细信息
我正在尝试创建一个模块化的 MVC swing 应用程序。所以我有一个运行代码的 Main
class,一个代表 window 的 Frame
class(扩展 JFrame
),并在其中有一个包含我的 GUI 元素的 class(扩展 JPanel
)。我的目标是当View需要改变的时候能够轻松地update/repaint Panel
class。
但是,正如我现在的代码一样,它运行时没有错误,它打开了一个空框架,但是 JPanel class 中的元素不会显示,我不知道为什么。 - 很可能是一个菜鸟错误,我知道,但我再也看不到了。
所以这是我的主要内容 class:
package mvc;
public class Main {
public static void main(String[] args)
{
new Frame();
}
}
这是 JFrame class
package mvc;
import java.awt.Container;
import javax.swing.JFrame;
public class Frame extends JFrame{
private static int width = 500;
private static int height = 500;
public Frame(){
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container pane = getContentPane();
Panel game = new Panel();
pane.add(game);
pack();
setSize(width, height);
setLocation(100,100);
setVisible(true);
}
}
这是 JPanel
package mvc;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Panel extends JPanel {
private JButton b1;
private JLabel l1;
public Panel(){
Container pane = new JPanel();
b1 = new JButton("Button");
pane.add(b1);
l1 = new JLabel("Label for the button");
pane.add(l1);
}
}
我不确定你为什么要这样做...
public Panel(){
Container pane = new JPanel();
b1 = new JButton("Button");
pane.add(b1);
l1 = new JLabel("Label for the button");
pane.add(l1);
}
但是您没有向任何内容添加 pane
,因此屏幕上没有显示任何内容
只做一些事情会更容易...
public Panel(){
b1 = new JButton("Button");
add(b1);
l1 = new JLabel("Label for the button");
add(l1);
}
您还应该仅在事件调度线程的上下文中创建和修改您的 UI,请查看 Initial Threads 了解更多详细信息