gpt4 book ai didi

java - 如何修正这个程序?

转载 作者:行者123 更新时间:2023-12-02 07:45:41 25 4
gpt4 key购买 nike

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

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. 您目前未对 FileChooser 执行任何操作
  4. 尽量避免static,而使用new Something()
  5. 不要使用 new Integer() 而是使用 Integer.valueOf() (这对于所有原始包装类、Boolean、Short、Long 都有效) ,...)

我不确定你是如何获得两个框架的,但我通过这样修改你的代码来工作。

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();
}
});
}

}

关于java - 如何修正这个程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10895569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com