防止多个JFrame窗口打开

时间:2016-12-30 05:49:19

标签: java swing jframe

在我打开新JFramebalanceFramevalueFrame)的代码底部,当用户点击右键时,会打开一个新框架,其中一个框架那个菜单选项。

但是,关闭弹出的新balanceFramevalueFrame,然后打开另一个balance / valueFrame,两个打开。关闭那两个并打开另一个,三个打开。关于如何制止这个的任何想法?看起来我的程序记住变量'value'的过去值并打开多个窗口。

    table.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
            System.out.println("Pressed");

        }
        public void mouseReleased(MouseEvent e) {
            if (e.isPopupTrigger()) {
                JTable source = (JTable)e.getSource();
                int row = source.rowAtPoint( e.getPoint() );
                int column = source.columnAtPoint( e.getPoint() );
                String value = table.getModel().getValueAt(row, column).toString();

                if (! source.isRowSelected(row)) 
                    source.changeSelection(row, column, false, false);

                popup.show(e.getComponent(), e.getX(), e.getY());

                menuItemBalanceSheet.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        try {
                            balanceFrame = new BalanceFrame("BalanceSheet", value);
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                        balanceFrame.setSize(1200, 600);
                        balanceFrame.setVisible(true);  
                        balanceFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    }
                });

                menuItemCompanyValue.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        try {
                            valueFrame = new ValueFrame("Company Value", value);
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                        valueFrame.setSize(1200, 600);                      
                        valueFrame.setVisible(true);    
                        valueFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                        value.
                    }
                });

            }
        }
    });
}
}

2 个答案:

答案 0 :(得分:2)

当您只想要一个动作侦听器时,您可以继续添加动作侦听器。 将此代码移动到初始化代码:

 menuItemBalanceSheet.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        try {
                            balanceFrame = new BalanceFrame("BalanceSheet", value);
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                        balanceFrame.setSize(1200, 600);
                        balanceFrame.setVisible(true);  
                        balanceFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    }
                });

                menuItemCompanyValue.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        try {
                            valueFrame = new ValueFrame("Company Value", value);
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                        valueFrame.setSize(1200, 600);                      
                        valueFrame.setVisible(true);    
                        valueFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                        value.
                    }
                });

答案 1 :(得分:0)

对于这一行,创建了一个JFrame:

valueFrame = new ValueFrame("Company Value", value);

你再次打电话给setVisible(true)。这就是创建第二个的原因:

valueFrame.setVisible(true);

考虑省略其中一个。

<强>提示:

尝试在主setSize()setDefaultCloseOperation()课程中执行ValueFrameBalanceFrame。在您已声明JFrame balanceFrame;JFrame valueFrame;的上方,尝试执行ValueFrame valueFrame;BalanceFrame balanceFrame;

现在在代码的下方,ActionListener试试这个:

menuItemCompanyValue.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        try {
            new ValueFrame("Company Value", value).setVisible(true);
        } catch (Exception e1) {
            e1.printStackTrace();
        }  
    }           
});