我正在尝试实例化一个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);
}
}
答案 0 :(得分:0)
每次调用getDatabasePanel()
时,您都会创建一个新的JFrame()。
MyFrame frame = new MyFrame();
frame.getDatabasePanel();
您不需要这样做,因为您已经在代码顶部创建了JFrame frame
。