如何纠正此程序



这是一个显示饼图的程序。我还有一个按钮。但是我编写的程序创建了两个单独的框架,一个框架用于饼图,另一个框架用于按钮。如何将按钮和饼图放在同一个框架上?你能纠正我的程序吗?

import java.awt.*;
import org.jfree.chart.*;
import org.jfree.chart.title.*;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.filechooser.*;
public class Pie{
 public static void getFile(File f)
{
    System.out.println("File is: "+f.getName());
}
public static void main(String[] args)
{
   JPanel panel=new JPanel();
    panel.setLayout(null);
    JButton b=new JButton("Open File");
    b.addActionListener(new ActionListener()
 {
        public void actionPerformed(ActionEvent e)
  {
        JFileChooser chooser=new JFileChooser();
        int ret = chooser.showDialog(null, "Open file");
        if (ret == JFileChooser.APPROVE_OPTION)
        {
        File file = chooser.getSelectedFile();
        getFile(file);
        }
       }
    }
);
       b.setBounds(50,40,100,35);
       panel.add(b);
    DefaultPieDataset pieDataset = new DefaultPieDataset();

  ieDataset.setValue("A", new Integer(10));
  pieDataset.setValue("B", new Integer(20));
  pieDataset.setValue("C", new Integer(30));
  pieDataset.setValue("D", new Integer(10));
  pieDataset.setValue("E", new Integer(20));
  pieDataset.setValue("F", new Integer(10));
  FreeChart chart = ChartFactory.createPieChart("Pie Chart using JFreeChart", pieDataset, true,true,true);
  ChartFrame frame1=new ChartFrame("Pie Chart",chart);
  frame1.add(panel);
  frame1.setVisible(true);
  frame1.setSize(600,600);
 }
}
  1. 除非确实有必要,否则不要使用绝对布局。依靠布局管理器、预设/最小/最大大小以及对大小和位置组件的限制。这也意味着你不应该在组件上调用setBounds/setSize/setLocation,让布局管理器为你做这件事。
  2. 从 EDT(事件调度踏步)初始化 UI
  3. 您当前没有对文件选择器执行任何操作
  4. 尽量避免static,而是使用new Something()
  5. 不要使用new Integer(),而是使用Integer.valueOf()(这适用于所有原始包装类,布尔值,短,长,...

我不确定你是如何得到两个帧的,但我通过这样修改它让你的代码工作。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class Pie {
    private static void initUI() {
        JPanel panel = new JPanel(new FlowLayout());
        final JButton b = new JButton("Open File");
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser();
                int ret = chooser.showDialog(b, "Open file");
                if (ret == JFileChooser.APPROVE_OPTION) {
                    File file = chooser.getSelectedFile();
                    // Don't know what you want to do
                }
            }
        });
        panel.add(b);
        DefaultPieDataset pieDataset = new DefaultPieDataset();
        pieDataset.setValue("A", Integer.valueOf(10));
        pieDataset.setValue("B", Integer.valueOf(20));
        pieDataset.setValue("C", Integer.valueOf(30));
        pieDataset.setValue("D", Integer.valueOf(10));
        pieDataset.setValue("E", Integer.valueOf(20));
        pieDataset.setValue("F", Integer.valueOf(10));
        JFreeChart chart = ChartFactory.createPieChart("Pie Chart using JFreeChart", pieDataset, true, true, true);
        JFrame frame1 = new JFrame();
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ChartPanel chartPanel = new ChartPanel(chart);
        // chartPanel.setPreferredSize(new Dimension(600, 600));
        frame1.getContentPane().add(chartPanel, BorderLayout.CENTER);
        frame1.getContentPane().add(panel, BorderLayout.SOUTH);
        frame1.pack();
        frame1.setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                initUI();
            }
        });
    }
}

有一个名为 ChartPanel 的类。它是JPanel类的子类。

JPanel chartPanel = new ChartPanel(chart);

然后,您可以将此面板添加到框架中。 希望这有帮助。。。

替换此行

  ChartFrame frame1=new ChartFrame("Pie Chart",chart);

   panel.add(chart)

请让我知道结果

相关内容

  • 没有找到相关文章

最新更新