如何从类中正确调用JFrame?

时间:2017-04-11 13:50:12

标签: java database swing class jframe

我正在尝试实例化一个JFrame实例,但每次引用该类时,都会显示一个新的JFrame。

我的代码的目标是从菜单栏中选择一个选项,然后我的数据库模板/表将显示在框架中,它会在框架中显示,但是在此过程中还会创建另外两个JFrame,我相信我找到了问题;我只是不知道如何解决这个问题。

如上所述,每次我想引用我的JFrame类来向我的框架添加模板时,它会创建一个额外的JFrame,因为我的类的设置方式,我怎样才能改善我的代码以便不会发生这种情况?

这是我的代码:

当我从JFrame上的菜单栏中选择一个项目时,会调用tigerActionPerformed()方法。

public class MenuActionListener implements ActionListener {

    public void tigerActionPerformed() {

        MyFrame frame = new MyFrame();
        frame.getDatabasePanel();

    @Override
    public void actionPerformed(final ActionEvent e) {
        String command = e.getActionCommand();

        switch (command) {

            case "tiger":
                tigerActionPerformed();
                break;

            default:
        }
    }
}

然后调用框架类将我的数据库添加到JFrame。

public class MyFrame{

    private JFrame frame;

    public MyFrame() {

        MenuBar menuBarInstance = new MenuBar();

        frame = new JFrame();
        frame.setTitle("Stock Application");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setPreferredSize(new Dimension(720, 480));
        frame.setJMenuBar(menuBarInstance.getMenuBar());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public void getDatabasePanel() {

        //Add database test
        acp.addDatabaseTemplate(frame);

    }

}

此类将我的数据库模板添加到我的面板,面板将添加到JFrame。

public class AddComponentsToPane {

    public void addDatabaseTemplate(Container pane) {

        //We need to have a new class to fill the database table
        StockApplication stockApp = new StockApplication();

        JTable tigerTable = new JTable();
        tigerTable.setModel(new DefaultTableModel(0, 3));

        stockApp.FillTable(tigerTable, "SELECT * FROM TIGER_INFO");

        JPanel centerPanel = new JPanel(new GridBagLayout());

        //We need center panel to add a JTable
        //centerPanel.add(tigerTable, new GridBagConstraints());

        GridBagConstraints c = new GridBagConstraints();

        c.weightx = 1.0;
        c.weighty = 1.0;
        c.insets = new Insets(6, 6, 6, 6);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 0;
        c.gridy = 0;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        centerPanel.add(tigerTable, c);

        pane.add(centerPanel, BorderLayout.CENTER);

    }

}

1 个答案:

答案 0 :(得分:0)

每次调用getDatabasePanel()时,您都会创建一个新的JFrame()。

MyFrame frame = new MyFrame();
frame.getDatabasePanel();

您不需要这样做,因为您已经在代码顶部创建了JFrame frame