防止Java框架的多个实例

时间:2013-02-21 18:36:56

标签: java swing jframe visibility

我正在处理的应用程序涉及根据用户选择的内容从JPanel创建的帧。我试图阻止用户启动同一帧的多个实例,如果两次选择相同的项目。这是我为此目的写的条件。

主要课程:

public void showPieGraphFrame()
{
    final PieGraph gPieGraph = new PieGraph("Traffic Type Distribution", counterOne, counterTwo);
    gPieGraph.pack();
    RefineryUtilities.positionFrameOnScreen(gPieGraph, 0.35, 0.03);

    if(!gPieGraph.isVisible())  
    {
    gPieGraph.setVisible(true);
    }
}

PieGraph类,我想阻止多个实例:

public class PieGraph extends ApplicationFrame implements ActionListener {

    public PieGraph(final String title) {
        super(title);

        // create a menubar
        setJMenuBar(createMenuBar());

        // create a dataset...
        final PieDataset dataset = trafficTypeDataset();

        // create the chart...
        final JFreeChart chart = createChart(dataset);

        // add the chart to a panel...
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(width, height));
        setContentPane(chartPanel);
    }

    private JFreeChart createChart(final PieDataset dataset) {

        final JFreeChart chart = ChartFactory.createPieChart("Test Chart", dataset, false, false, false);

        final PiePlot plot = (PiePlot) chart.getPlot();

        return chart;
    }

但是,它不起作用,您仍然可以多次启动相同的帧。我该如何防止这种情况?

3 个答案:

答案 0 :(得分:6)

  

我该如何防止这种情况?

将框架交换为模式JDialogJOptionPane

答案 1 :(得分:2)

这很简单,不允许你两次拨打setVisible。只有两个JFame个对象时才会出现两个窗口。将JFrame设为Singleton 希望我能提供帮助。

答案 2 :(得分:2)

对框架使用单例模式,例如:

public class MainFrame extends JFrame() {

 private static MainFrame instance;

 public static MainFrame getInstance(//parameters) {
   if (instance == null){
    instance = new MainFrame(//parameters)
 }
    return instance;
 }

 private MainFrame(//parameters){}

}