Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止多个Java框架实例_Java_Swing_Jframe_Visibility - Fatal编程技术网

防止多个Java框架实例

防止多个Java框架实例,java,swing,jframe,visibility,Java,Swing,Jframe,Visibility,我正在处理的应用程序涉及基于用户选择的JPanel创建的帧。我试图阻止用户在两次选择同一项时启动同一帧的多个实例。这是我为此写的条件 主要类别: public void showPieGraphFrame() { final PieGraph gPieGraph = new PieGraph("Traffic Type Distribution", counterOne, counterTwo); gPieGraph.pack(); RefineryUtilities.p

我正在处理的应用程序涉及基于用户选择的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;
    }
但是,它不起作用,您仍然可以多次启动同一帧。我怎样才能防止这种情况

我怎样才能防止这种情况


将框架交换为模式的
JDialog
JOptionPane
它不允许您调用
setVisible
两次。只有当您有两个
JFame
对象时,才会出现两个窗口。使您的
JFrame
a
Singleton


希望我能帮上忙。

在框架上使用单体模式,例如:

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){}

}

为了更快地获得更好的帮助,请发布一个。那么,有没有可能在不久的将来看到SSCCE,或者您是否打算让我们猜测您的代码为什么会被破坏?这是我第一次听说SSCCE概念,我不确定我可能遗漏了您正在寻找的其他细节。好吧,在“SSCCE”中,您迄今为止已经实现了“S”。剩下的试试。我不知道如何发布一个独立的例子,因为我目前有1800行代码,跨越7个类。不幸的是,这不是一个选项。框架包含一个图形和一个JMenuBar。“框架包含一个图形和一个JMenuBar。”究竟为什么从GUI弹出的元素需要它自己的菜单?你似乎把这一切都搞错了。请参阅,了解一些基本技巧。我一直在考虑切换到JInternalFrame,而不是现在的JInternalFrame。谢谢你指出我正在尝试的可能不是一个好方法。我仍然很好奇,是否有办法按照我的要求去做。如果医生坚持,没有问题。JDialog也可以有一个JMenuBar。“我仍然很好奇是否有办法做到我所要求的。”可能。我认为当前失败的原因是@GiovaniGuizzo“只有当您有两个JFame对象时,才会出现两个窗口”。这让我想到,在该代码段之外的某个地方,有代码(允许)创建多个帧。但除了看到SSCCE,我真的不能肯定。