WindowBuilder - 从Main打开一个JFrame

时间:2015-06-01 10:35:18

标签: java swing button jframe windowbuilder

我有一个Main.java,在这里我只会启动(设置为true)我的JFrame窗口。 但它只打开一个没有任何东西的小窗口。 然后我会按下Highscorebutten,然后显示另一个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);
    }

FWindow

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"
        }

    ){

    });

.......

1 个答案:

答案 0 :(得分:1)

FWindow扩展了JFrame,但它正在创建JFrameMenue)的第二个实例,这意味着您只显示FWindow,什么都没有。

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

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将在不同平台上看起来像您期望的那样