十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
90度直角弯线其实就是两条直线,第一条线的两个顶点坐标其实你是知道的,然后第二条线的第一个顶点就是你第一条线的第二个顶点,第二条线的第二个顶点可以根据第一个顶点跟长度计算出来。
10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有泉州免费网站建设让你可以放心的选择与我们合作。
public class XYJFrame extends javax.swing.JFrame {
/**
* Creates new form XYJFrame
*/
public XYJFrame() {
initComponents();
iniCoordinate();
}
/**
* Netbeans 生成的代码,用于界面设计
*/
@SuppressWarnings("unchecked")
// editor-fold defaultstate="collapsed" desc="Generated Code"
private void initComponents() {
lblXCoordinate = new javax.swing.JLabel();
lblYCoordinate = new javax.swing.JLabel();
txtXCoordinate = new javax.swing.JTextField();
txtYCoordinate = new javax.swing.JTextField();
btnCalculateY = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
lblXCoordinate.setText("X 坐标");
lblYCoordinate.setText("Y 坐标");
btnCalculateY.setText("计算 Y 坐标");
btnCalculateY.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCalculateYActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(37, 37, 37)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblXCoordinate)
.addComponent(lblYCoordinate))
.addGap(29, 29, 29)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(txtXCoordinate)
.addComponent(txtYCoordinate, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(btnCalculateY)
.addGap(30, 30, 30)))
.addContainerGap(131, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(70, 70, 70)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblXCoordinate)
.addComponent(txtXCoordinate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(24, 24, 24)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblYCoordinate)
.addComponent(txtYCoordinate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(28, 28, 28)
.addComponent(btnCalculateY)
.addContainerGap(103, Short.MAX_VALUE))
);
pack();
}// /editor-fold
private void btnCalculateYActionPerformed(java.awt.event.ActionEvent evt) {
this.txtYCoordinate.setText(this.calculateY() + "");
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(XYJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(XYJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(XYJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(XYJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
///editor-fold
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new XYJFrame().setVisible(true);
}
});
}
private void iniCoordinate() {
// 转折点 X 坐标
dbXCoordinate = new double[] { 0, 0.1, 0.3, 0.5, 1 };
// 转折点 Y 坐标
dbYCoordinate = new double[] { 0, 0.4, 0.7, 0.85, 1 };
}
// 计算 Y 坐标
private double calculateY() {
double xCoordinate = Double.parseDouble(this.txtXCoordinate.getText());
int xPos = getXPositon(xCoordinate);
return xPos == -1 ? -1 : (dbYCoordinate[xPos] * xCoordinate) / dbXCoordinate[xPos];
}
// 得到输入的 X 值位置,确定比率
private int getXPositon(double xCoordinate) {
for(int i=0; i dbXCoordinate.length; i++) {
if(xCoordinate = dbXCoordinate[i]) {
return i;
}
}
return -1;
}
private double[] dbXCoordinate = new double[5];
private double[] dbYCoordinate = new double[5];
private double[] rate = new double[5];
// Variables declaration - do not modify
private javax.swing.JButton btnCalculateY;
private javax.swing.JLabel lblXCoordinate;
private javax.swing.JLabel lblYCoordinate;
private javax.swing.JTextField txtXCoordinate;
private javax.swing.JTextField txtYCoordinate;
// End of variables declaration
}
package com.lei.jfreechart;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class LineCharts extends ApplicationFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
public LineCharts(String s) {
super(s);
setContentPane(createDemoLine());
}
public static void main(String[] args) {
LineCharts fjc = new LineCharts("折线图");
fjc.pack();
RefineryUtilities.centerFrameOnScreen(fjc);
fjc.setVisible(true);
}
// 生成显示图表的面板
public static JPanel createDemoLine() {
JFreeChart jfreechart = createChart(createDataset());
return new ChartPanel(jfreechart);
}
// 生成图表主对象JFreeChart
public static JFreeChart createChart(DefaultCategoryDataset linedataset) {
// 定义图表对象
JFreeChart chart = ChartFactory.createLineChart("一季度销售曲线", //折线图名称
"时间", // 横坐标名称
"销售额(百万)", // 纵坐标名称
linedataset, // 数据
PlotOrientation.VERTICAL, // 水平显示图像
true, // include legend
true, // tooltips
false // urls
);
CategoryPlot plot = chart.getCategoryPlot();
plot.setRangeGridlinesVisible(true); //是否显示格子线
plot.setBackgroundAlpha(0.3f); //设置背景透明度
NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
rangeAxis.setUpperMargin(0.20);
rangeAxis.setLabelAngle(Math.PI / 2.0);
return chart;
}
// 生成数据
public static DefaultCategoryDataset createDataset() {
DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
// 各曲线名称
String series1 = "冰箱";
String series2 = "彩电";
String series3 = "洗衣机";
// 横轴名称(列名称)
String type1 = "1月";
String type2 = "2月";
String type3 = "3月";
linedataset.addValue(0.0, series1, type1);
linedataset.addValue(4.2, series1, type2);
linedataset.addValue(3.9, series1, type3);
linedataset.addValue(1.0, series2, type1);
linedataset.addValue(5.2, series2, type2);
linedataset.addValue(7.9, series2, type3);
linedataset.addValue(2.0, series3, type1);
linedataset.addValue(9.2, series3, type2);
linedataset.addValue(8.9, series3, type3);
return linedataset;
}
}
网友分享,看看是否能帮到你
是jFreeChart吧?
这是Struts中结合 jFreeChart 画3种图,是我自己一个项目用到的 你自己看看吧 其中为生成List数据 我是在数据库用取出来的 jFreeChart 的接受数据应该是 类似于二维数组型的 这个网上有介绍
public String chartDB() {
if (style.equals("饼图")) {
drawPieChart();
} else if (style.equals("垂直柱状统计图")) {
drawBarChart();
} else if (style.equals("折线统计图")) {
drawLineChart();
}
return SUCCESS;
}
private void drawLineChart() {
MapString, Object session = ActionContext.getContext().getSession();
recordids = (String[]) session.get("recordids");
String[] field = new String[word.length]; // 获得要查询的字段
String[] rowKeys = new String[word.length]; // 各字段的中文名称
for (int i = 0; i word.length; i++) {
field[i] = word[i].split("-")[0];
rowKeys[i] = word[i].split("-")[1];
}
StringBuffer sb = new StringBuffer("SELECT ");
for (int j = 0; j field.length; j++) {
sb.append("sum(" + field[j] + "), ");
}
sb
.append("DATE_FORMAT(bas_datestart,'%Y-%m') from disasterrecord where bas_recordid in "
+ Util.typesToString(recordids)
+ " group by DATE_FORMAT(bas_datestart,'%Y-%m')");
ListObject[] list = new SearchService().findBySql(sb.toString());
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
String[] category = new String[list.size()];
for (int k = 0; k field.length; k++) {
for (int j = 0; j list.size(); j++) {
if(list.get(j)[field.length]==null){
category[j] = "";
}else{
category[j] = list.get(j)[field.length].toString();
}
if(list.get(j)[k] ==null){
dataSet.addValue(new Double(0), rowKeys[k], category[j]);
}else{
dataSet.addValue(new Double(list.get(j)[k].toString()),
rowKeys[k], category[j]);
}
}
}
chart = ChartFactory.createLineChart(title, xname, yname, dataSet,
PlotOrientation.VERTICAL, true, true, false);
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15));
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
CategoryPlot plot = (CategoryPlot) chart.getPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
/*------设置Y轴坐标上的文字-----------*/
numberaxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12));
/*------设置Y轴的标题文字------------*/
numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
}
private void drawBarChart() {
MapString, Object session = ActionContext.getContext().getSession();
recordids = (String[]) session.get("recordids");
String[] field = new String[word.length]; // 获得要查询的字段
String[] rowKeys = new String[word.length]; // 各字段的中文名称
for (int i = 0; i word.length; i++) {
field[i] = word[i].split("-")[0];
rowKeys[i] = word[i].split("-")[1];
}
StringBuffer sb = new StringBuffer("SELECT ");
if (type.equals("各地区各灾害")) {
for (int j = 0; j field.length; j++) {
sb.append("sum(" + field[j] + "), ");
}
sb
.append(" bas_cityarea from disasterrecord where bas_recordid in "
+ Util.typesToString(recordids)
+ " group by bas_cityarea");
} else {
for (int j = 0; j field.length; j++) {
sb.append("sum(" + field[j] + "), ");
}
sb
.append("Year(bas_datestart) from disasterrecord where bas_recordid in "
+ Util.typesToString(recordids)
+ " group by Year(bas_datestart)");
}
ListObject[] list = new SearchService().findBySql(sb.toString());
String[] columnKeys = new String[list.size()]; // 获得 各地区名 或者 年份
for (int k = 0; k list.size(); k++) {
columnKeys[k] = list.get(k)[field.length].toString();
}
double[][] data = new double[rowKeys.length][columnKeys.length];
for (int m = 0; m rowKeys.length; m++) {
for (int n = 0; n columnKeys.length; n++) {
if (list.get(n)[m] == null) {
data[m][n] = new Double(0);
} else {
data[m][n] = new Double(list.get(n)[m].toString());
}
}
}
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
rowKeys, columnKeys, data);
chart = ChartFactory.createBarChart3D(title, xname, yname, dataset,
PlotOrientation.VERTICAL, true, true, false);
CategoryPlot plot = chart.getCategoryPlot();// 获取图表区域对象
CategoryAxis domainAxis = plot.getDomainAxis();
// 水平底部列表
domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 14));
// 水平底部标题
domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));
// 垂直标题
ValueAxis rangeAxis = plot.getRangeAxis();// 获取柱状
rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 15));
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.BOLD, 15));
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(10D);
renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
//设置每个地区所包含的平行柱的之间距离
//renderer.setItemMargin(0.3);
plot.setRenderer(renderer);
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
}
public void drawPieChart() {
MapString, Object session = ActionContext.getContext().getSession();
recordids = (String[]) session.get("recordids");
String sql = "";
String field[] = word[0].split("-");
if (type.equals("各地区各灾害")) {
sql = "SELECT sum("
+ field[0]
+ ") +'', bas_cityarea from disasterrecord where bas_recordid in "
+ Util.typesToString(recordids) + " group by bas_cityarea";
} else {
sql = "SELECT sum("
+ field[0]
+ ") +'', Year(bas_datestart) from disasterrecord where bas_recordid in "
+ Util.typesToString(recordids)
+ " group by Year(bas_datestart)";
}
ListObject[] list = new SearchService().findBySql(sql);
DefaultPieDataset data = new DefaultPieDataset();
for (Object[] o : list) {
if(o[0] == null){
data.setValue(o[1].toString(), new Double(0));
}
data.setValue(o[1].toString(), new Double(o[0].toString()));
}
chart = ChartFactory.createPieChart(title, data, true, true, false);
Font font = new Font("SimSun", 10, 20);
TextTitle txtTitle = null;
txtTitle = chart.getTitle();
txtTitle.setFont(font);
PiePlot pieplot = (PiePlot)chart.getPlot();
pieplot.setLabelFont(font);
chart.getLegend().setItemFont(font);
}
jfreechart只能产生静态图表,鼠标移上去显示的数值,实际上是靠html 的map来实现的,因此那个矩形框是浏览器显示的,与代码无关,所以也改不了的。
至于只显示Y轴的值,请从chart得到plot,然后再从plot得到renderer,再自定义renderer的ToolTipGenerator,从而实现自定义的tooltip.
如果想要更动态的图表,可以使用flash图表,如fusioncharts
用这个插件可以实现,只需要将你从数据库中得到的数据封装成xml格式的数据,就可以在页面上显示,显示的效果就像excel中的统计图,如果需要我可以给你发一下这个插件FusionChartsFree