gpt4 book ai didi

java - WindowBuilder - 从 Main 打开 JFrame

转载 作者:行者123 更新时间:2023-12-01 11:29:05 26 4
gpt4 key购买 nike

我有一个 Main.java,在这里我只会启动(设置可见 true )我的 JFrame 窗口。但它只打开一个小窗口,没有任何东西。然后我会按下 Highscore 按钮,然后应该显示另一个 JFrame (高分)。

我应该做什么?

(这不是完整的代码)

主要

public class Main {
private static MyWindow window = null;

public static void main(String[] args) {
window = new MyWindow();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Frame sichtbar machen
window.setVisible(true);
}

F窗口

public class FWindow extends JFrame{    

private JFrame Menue;

public FWindow() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {
Menue = new JFrame();
Menue.setBounds(100, 100, 469, 741);
Menue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Menue.getContentPane().setLayout(null);

JPanel pMenue = new JPanel();

pMenue.setLayout(null);

JLabel lblHighscore = new JLabel();
lblHighscore.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Highscore highscore = new Highscore();
getContentPane().add(highscore);
System.out.println();
highscore.setVisible(true);

}
});
//........

高分

public class Highscore extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JTable table;
TableModel model;

public Highscore() {


table = new JTable(model);
table.setShowGrid(false);
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
table.setForeground(Color.WHITE);
table.setBackground(new Color(113,197,208));
table.setFont(new Font("Comic Sans MS", Font.PLAIN, 30));
table.setRowHeight(40);
table.setAutoCreateRowSorter(true);



table.setModel(new DefaultTableModel(
new Object[][] {
//.....
},
new String[] {
"1", "2", "3"
}

){

});

......

最佳答案

FWindow 扩展了 JFrame,但它正在创建 JFrame 的第二个实例(Menue),这意味着您仅显示 FWindow,上面什么也没有。

FWindow中删除extends JFrame,它没有添加任何有用的功能

FWindow 添加一个方法,该方法将准备并显示 Menue 实例

public class FWindow {

private JFrame Menue;

public FWindow() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {
Menue = new JFrame();
Menue.setBounds(100, 100, 469, 741);
Menue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Menue.getContentPane().setLayout(null);

JPanel pMenue = new JPanel();

pMenue.setLayout(null);

JLabel lblHighscore = new JLabel();
lblHighscore.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Highscore highscore = new Highscore();
getContentPane().add(highscore);
System.out.println();
highscore.setVisible(true);

}
});
//........
}

public void prepareAndShow() {
//...
Menue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Menue.setVisible(true);
}

然后,从您的 main 方法中,确保调用它

public class Main {
private static MyWindow window = null;

public static void main(String[] args) {
window = new MyWindow();
// Frame sichtbar machen
window.prepareAndShow();
}

举个例子

咆哮警告

通常,我会说避免使用 null 布局,像素完美布局是现代 UI 设计中的一种幻觉。影响组件个体尺寸的因素太多,您无法控制其中任何一个。 Swing 的设计目的是与核心的布局管理器一起工作,放弃这些将导致无休止的问题和问题,您将花费越来越多的时间来尝试纠正......

但这会导致对 WindowBuilder 的优缺点的争论......

基本上,您最好学习手动编写 UI 代码,它们将使您更好地了解布局管理器的工作方式以及如何实现复杂和解耦的 UI 以及看起来像您期望的方式的 UI它在不同的平台上

关于java - WindowBuilder - 从 Main 打开 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com