首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何整改这个程序?

如何整改这个程序?
EN

Stack Overflow用户
提问于 2012-06-05 18:22:54
回答 3查看 466关注 0票数 0

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

代码语言:javascript
复制
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);

 }

}
EN

回答 3

Stack Overflow用户

发布于 2012-06-05 19:00:05

  1. 除非确实必要,否则不要使用绝对布局。依赖布局管理器、首选项/最小值/最大值大小以及对组件大小和位置的约束。这也意味着您不应在组件上调用setBound/setSize/setLocation,让布局管理器为您执行此操作。
  2. 从EDT (事件调度方式)
  3. 初始化UI当前
  4. 尝试避免使用static,而是使用new Integer(),而使用Integer.valueOf() (这对所有基元包装类,Boolean、Short、Long,...)都有效。H214G215

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

代码语言:javascript
复制
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();
            }
        });
    }

}
票数 1
EN

Stack Overflow用户

发布于 2012-06-05 19:03:33

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

代码语言:javascript
复制
JPanel chartPanel = new ChartPanel(chart);

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-05 18:36:53

替换此行

代码语言:javascript
复制
  ChartFrame frame1=new ChartFrame("Pie Chart",chart);

使用

代码语言:javascript
复制
   panel.add(chart)

请让我知道结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10895569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档