我正在处理的应用程序涉及根据用户选择的内容从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;
}
但是,它不起作用,您仍然可以多次启动相同的帧。我该如何防止这种情况?
答案 0 :(得分:6)
我该如何防止这种情况?
将框架交换为模式JDialog
或JOptionPane
。
答案 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){}
}