欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

DragChartPanel可拖拽曲線應(yīng)用詳解

 更新時(shí)間:2019年12月19日 11:56:10   作者:小秋蜀黍  
這篇文章主要為大家詳細(xì)介紹了DragChartPanel可拖拽曲線的應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

DragChartPanel  是java cs架構(gòu)中的一種圖形展現(xiàn)的開源組件。

業(yè)務(wù)需求需要用到DragChartPanel  ,這是一種根據(jù)jtable表格中的數(shù)據(jù)給與展示的圖形組件。它和其他圖形組件區(qū)別再與它可以進(jìn)行拖拽,用戶通過它不僅可以看出數(shù)據(jù)變化的曲線,而且可以通過拖拽修改表格中的數(shù)據(jù)。

下面展示一下它的效果圖:

丑歸丑,但是很實(shí)用呀。

下面展示它的代碼

初始化坐標(biāo)格圖:

chartpanel1 = new DragChartPanel(this);
chartpanel1.setXtitle("時(shí) 間");
chartpanel1.setYtitle("負(fù) 荷(MW)");
chartpanel1.setDragLabel(jLabel1);
chartpanel1.setTm((DefaultTableModel) jTable1.getModel());
chartpanel1.setStartRow(0);
chartpanel1.setChartPanel(jPanel11);

繪制曲線:

private void drawGraph(int col) {
jLabel1.setText("");
int count = jTable1.getRowCount();
String[][] chartData1 = new String[1][count];
String[] chartIndex = new String[count];
DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
for (int i = 0; i < tm.getRowCount(); i++) {
      chartIndex[i] = tm.getValueAt(i, 0) == null ? "" : tm.getValueAt(i, 0).toString();
      chartData1[0][i] = tm.getValueAt(i, col) == null ? "" : tm.getValueAt(i, col).toString();
    }
    if (chartpanel1 != null) {
      chartpanel1.setEditColumn(col);
      chartpanel1.setData(chartData1);
      chartpanel1.setXLab(chartIndex);
      chartpanel1.setTitle(tm.getColumnName(col));
      chartpanel1.setLs_linename(new String[]{tm.getColumnName(col)});
      chartpanel1.getChart();
    }
  }

這個(gè)組件有一個(gè)缺點(diǎn)。只支持對(duì)列進(jìn)行修改,這是這個(gè)組件的一個(gè)特點(diǎn)(拖動(dòng)曲線表格的列會(huì)發(fā)生改動(dòng))。
為了使用它,很多表的結(jié)構(gòu)就不得不迎合這一缺點(diǎn)。

例如如下表結(jié)構(gòu):

都是按列展示的。對(duì)于有些情況很不合理!如何解決(思考中。。。。。。)

上面思考的問題解決了?。?!

源碼中有這樣一個(gè)字段:

再使用的過程中會(huì)出現(xiàn)如下情況:

這個(gè)時(shí)候你get哪個(gè)model就無所謂了,為了避免影響,隨便弄一樣不會(huì)發(fā)生改變的model吧。

這樣,拖動(dòng)曲線的時(shí)候,label的值會(huì)實(shí)時(shí)顯示曲線的坐標(biāo)。

那么,給上面的label 加一個(gè)監(jiān)聽,改變值的時(shí)候,將label的內(nèi)容用“:”分割開,不剛好是x軸和y軸的值了嗎?

對(duì)應(yīng)橫向表格中,直接再label監(jiān)聽事件中就可以更改table的值。(完美?。。。?/p>

注意一下:有時(shí)拖動(dòng)x軸的坐標(biāo)是很詳細(xì)很詳細(xì)的數(shù)據(jù)移動(dòng),是因?yàn)槟氵x這了setIndex而不是setXLab

private void initChartline() {
     //填充 圖形
    String[][] ChartData = new String[1][24];
    String[] ChartIndex = new String[24];
    if (fixTable.getRowCount() > 0) {
      for (int i = 0; i < dataTable.getColumnCount() - 2; i++) {
        ChartIndex[i] = String.valueOf(i);
        ChartData[0][i] = dataTable.getValueAt(fixtable_sld, i) == null ? "" : dataTable.getValueAt(fixtable_sld, i).toString();
      }
      if (dchartpanel_1 != null) {
        //String pdate = (String) fixTable.getValueAt(fixTable.getSelectedRow(), 3);
        dchartpanel_1.setLs_linename(new String[]{"聯(lián)絡(luò)線曲線" + "ceshi1" + "(MW)"});
        dchartpanel_1.setLcol(Lcol);
        dchartpanel_1.setXLab(ChartIndex);//setXLab 和setIndex的區(qū)別在于,setXLab拖動(dòng)取值x軸是按照下標(biāo)取值的,而setIndex則是拖動(dòng)的位置,常常不是整數(shù),推薦用前者
        dchartpanel_1.setData(ChartData);
        //dchartpanel_1.setIndex(ChartIndex);
        dchartpanel_1.getChart();
      }
    } 
  }
//曲線顏色
  private java.awt.Color[] Lcol = {    
    java.awt.Color.red,
    java.awt.Color.blue,
    java.awt.Color.blue};

它的源碼:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.qctc.view.common.frame.pub;
 
import com.qctc.common.util.period;
import com.qctc.common.Constant;
import com.qctc.view.common.frame.BaseSubTabModule;
import com.qctc.view.common.frame.pub.datasysgraphdrag.datasysgraph;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
 
/**
 *
 * @author Administrator
 */
public class DragChartPanel {
 
  private java.awt.Color[] Lcol = Constant.Lcol;
  private Color bgcolor = new Color(204, 204, 255);//背景色
  private Color rectcolor = Color.white;//圖形矩形內(nèi)顏色
 
  public DragChartPanel(BaseSubTabModule parentModule, Color bgcolor, Color rectcolor) {
    this.bgcolor = bgcolor;
    this.rectcolor = rectcolor;
    this.parentModule = parentModule;
    initChartPanel();
  }
 
  public DragChartPanel(BaseSubTabModule parentModule) {
    this.parentModule = parentModule;
    initChartPanel();
  }
 
  public DragChartPanel() {
    initChartPanel();
  }
 
  public void initChartPanel() {
    //設(shè)置是否翻頁
    chart.setMutiPage(false);
    chart.setConvertBool(true);
 
    //設(shè)置底色
    chart.setBackColor(bgcolor);
//    chart.setBackColor(new Color(192,192,192));
    //設(shè)置圖形區(qū)域的邊框顏色
    chart.setBorderColor(Color.red);
 
    //設(shè)置圖形區(qū)域的底色
//    chart.setChartRectColor(new Color(204, 204, 250)); 
//    if(Constant.SYSTEM_AREA.equals("山西")){
    chart.setChartRectColor(rectcolor);
//    chart.setChartRectColor(new Color(74,74,107));
//    } 
 
    //設(shè)置xy坐標(biāo)軸顏色
    chart.setXyColor(new Color(30, 30, 30));
 
    //設(shè)置標(biāo)題顏色
    chart.setTitleColor(new Color(30, 30, 30));
 
    //設(shè)置網(wǎng)格顏色
    chart.setGridColor(new Color(50, 180, 180));
 
    //設(shè)置是否顯示網(wǎng)格 1 顯示 其他不顯示
    chart.setShowHidegrid(1);
 
    //設(shè)置顯示點(diǎn)的大小
//    chart.setShowHidep(0);
//    if (Constant.SYSTEM_AREA.equals("山西")) {
    chart.setShowHidep(1);
//    }
 
    //鼠標(biāo)移動(dòng)曲線上是否自動(dòng)顯示橫縱坐標(biāo)十字線
    chart.setshowCrossLine(true);
    //設(shè)置鼠標(biāo)移動(dòng)曲線顯示的十字線顏色
    chart.setCrossLineColor(new Color(150, 180, 150));
 
    //設(shè)置曲線類型:0 連續(xù)的曲線 3只顯示點(diǎn)
    chart.setLineType(0);
 
    //設(shè)置鼠標(biāo)提示框框邊顏色
    chart.setLwBorderColor(Color.red);
    //設(shè)置鼠標(biāo)顯示提示框底色
    chart.setLwColor(Color.yellow);
    //設(shè)置鼠標(biāo)顯示提示框提示字的顏色
    chart.setLwTextColor(Color.white);
 
    //設(shè)置橫豎網(wǎng)格線條數(shù)
    chart.setXzPoints(9);
    chart.setYzPoints(10);
 
    chartpanel.setLayout(new BorderLayout());
    chartpanel.add(getChart(), java.awt.BorderLayout.CENTER);
    chart.addMouseListener(new java.awt.event.MouseAdapter() {
 
      public void mousePressed(java.awt.event.MouseEvent evt) {
        dragState = true;
      }
 
      public void mouseReleased(java.awt.event.MouseEvent evt) {
        dragState = false;
      }
    });
  }
 
  public boolean isDragState() {
    return dragState;
  }
  private boolean dragState = false;
  protected BaseSubTabModule parentModule;
  private JPanel chartpanel = new JPanel();
  // 
  private datasysgraph chart = new datasysgraph();
  //圖形參數(shù)
  private double maxv = -999999999, minv = 999999999;
  private boolean maxv_zd = true;
  private boolean minv_zd = true;
  private String[][] data = null;
  private String[] ls_linename = null;
  private String title = "";
  private String xtitle = "";
  private String ytitle = "";
  private int xpoints = 12;
  private int xmax = 96;
  private int xmin = 0;
  private String[] index = null;
  private int EditColumn = 0;//拖動(dòng)關(guān)聯(lián)列
  private int StartRow = 0;//拖動(dòng)起始行
  private JLabel DragLabel = null;//關(guān)聯(lián)table
  private DefaultTableModel tm = null;//關(guān)聯(lián)的tm
  private boolean sftd = true;
  private int ShowLabelCol = -1;
  private int[] LineShowLabelCols;
 
  public void setSftd(boolean sftd) {
    this.sftd = sftd;
  }
 
  public void setShowLabelCol(int ShowLabelCol) {
    this.ShowLabelCol = ShowLabelCol;
  }
 
  public void setLineShowLabelCols(int[] LineShowLabelCols) {
    this.LineShowLabelCols = LineShowLabelCols;
  }
 
  public void setTm(DefaultTableModel tm) {
    this.tm = tm;
  }
 
  public void setDragLabel(JLabel DragLabel) {
    this.DragLabel = DragLabel;
  }
 
  public void setEditColumn(int EditColumn) {
    this.EditColumn = EditColumn;
  }
 
  public void setStartRow(int StartRow) {
    this.StartRow = StartRow;
  }
 
  public void setXtitle(String xtitle) {
    this.xtitle = xtitle;
  }
 
  public void setYtitle(String ytitle) {
    this.ytitle = ytitle;
  }
 
  public void setIndex(String[] index) {
    this.index = index;
  }
 
  public void setData(String[][] data) {
    this.data = data;
  }
 
  public void setLs_linename(String[] ls_linename) {
    this.ls_linename = ls_linename;
  }
 
  public void setTitle(String title) {
    this.title = title;
  }
 
  public datasysgraph getChart() {
    try {
      createChart();
 
      return chart;
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }
 
  public datasysgraph getChartByColor(Color[] col) {
    try {
      createChartByColor(col);
 
      return chart;
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }
 
  /**
   * 設(shè)置chart要加入的JPanel
   * @param panel
   */
  public void setChartPanel(JPanel panel) {
    Container parent = chartpanel.getParent();
    if (parent != null) {
      parent.removeAll();
    }
    panel.add(chartpanel);
    panel.setMinimumSize(new Dimension(300, 100));
  }
 
  private void createChart() {
    setMaxMin(this.data);
    setPara();
    setDragPara();
    setXY();
    buildChart();
  }
 
  private void createChartByColor(Color[] col) {
    setMaxMin(this.data);
    setPara();
    setDragPara();
    setXY();
    buildChartByColor(col);
  }
 
  /**
   * 生成圖
   */
  private void buildChart() {
    try {
      if (this.data != null) {
        int len = this.data.length;
        for (int i = 0; i < len; i++) {
          chart.AddItem(ls_linename[i], data[i].length,
              this.Lcol[i]);
          chart.setPointValue(ls_linename[i], this.index, this.data[i]);
        }
        chart.refresh();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  /**
   * 生成圖
   */
  private void buildChartByColor(Color[] col) {
    try {
      if (this.data != null) {
        int len = this.data.length;
        for (int i = 0; i < len; i++) {
          chart.AddItem(ls_linename[i], data[i].length,
              col[i]);
          chart.setPointValue(ls_linename[i], this.index, this.data[i]);
        }
        chart.refresh();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  /**
   * 設(shè)置參數(shù)
   */
  private void setPara() {
    try {
      chart.ClearAll();
      chart.setTitle(this.title);
      chart.setLtitlex(this.xtitle);
      chart.setLtitley(this.ytitle);
      chart.setMutiPage(false);
      chart.setYbzzb(this.getMaxv(), this.getMinv());
      chart.setShowLabelCol(ShowLabelCol);
      chart.setLineShowLabelCols(LineShowLabelCols);
 
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  private void setDragPara() {
    // 拖動(dòng)數(shù)據(jù)列設(shè)置
    chart.setEditColumn(this.EditColumn);
    // 拖動(dòng)起始行設(shè)置
    chart.setStartIndex(this.StartRow);
    chart.setJlabel(this.DragLabel);
    // 是否 實(shí)現(xiàn)拖動(dòng) 設(shè)置
    chart.setIsDrag(this.sftd);
    chart.setTableDataModel(this.tm);
  }
  private String[] XLab = null;
 
  /**
   * 設(shè)置 圖形x軸標(biāo)簽
   * @param XLab 
   */
  public void setXLab(String[] XLab) {
    this.XLab = XLab;
  }
 
  public void setXpoints(int xpoints) {
    this.xpoints = xpoints;
  }
  /**
   * x軸顯示坐標(biāo)間隔點(diǎn)數(shù)
   */
  private int XTabN = 10;
 
  /**
   * 設(shè)置xy軸
   */
  private void setXY() {
    try {
      chart.setXzPoints(this.xpoints);//x軸 分割線
      chart.setXmin(this.xmin);
 
      if (XLab == null) {
        chart.setXmax(this.xmax);
 
        this.xpoints = 12;
        period period1 = new period();
        String[] ls_pd = new String[97];
        for (int i = 0; i < 96; i++) {
          ls_pd[i] = period1.getPeriod()[i];
        }
        ls_pd[96] = "24:00";
 
        for (int i = 0; i <= 12; i++) {
          if (i == 0) {
            chart.SetXlab(i, ls_pd[i]);
          } else {
            chart.SetXlab(i, ls_pd[i * 8]);
          }
        }
        chart.setConvertBool(true);
        chart.setdxLab(ls_pd);
      } else {
 
 
        int len = this.data[0].length;
        this.XTabN = len / 8 + 1;
        this.xpoints = len / this.XTabN + 1;
        chart.setXzPoints(this.xpoints);//x軸 分割線
 
        this.index = new String[len];
        for (int i = 0; i < len; i++) {
          index[i] = String.valueOf(i);
        }
 
        this.xmax = this.xpoints * this.XTabN;
        chart.setXmax(this.xmax);
 
        String[] TmXLab = new String[this.xmax];
        for (int i = 0; i < this.xmax; i++) {
          if (i < XLab.length) {
            TmXLab[i] = XLab[i];
          } else {
            TmXLab[i] = "";
          }
        }
 
        for (int i = 0; i < this.xpoints; i++) {
          if (i * this.XTabN < len) {
            chart.SetXlab(i, TmXLab[i * this.XTabN]);
          } else {
            chart.SetXlab(i, "");
          }
        }
        chart.SetXlab(this.xpoints, " ");
 
        chart.setConvertBool(true);
        chart.setdxLab(TmXLab);
 
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  /**
   * 獲取最值
   * @param data 
   */
  private void setMaxMin(String[][] data) {
    if (this.maxv_zd) {
      this.maxv = -999999999;
      try {
        if (data != null) {
          for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
              if (data[i][j] != null && !data[i][j].equals("")) {
                try {
                  double maxdd = Double.parseDouble( (data[i][j] == null || "null".equals(data[i][j]) || "".equals(data[i][j])) ? "0" : data[i][j]);
                  if ( maxdd > getMaxv()) {
                    this.maxv = maxdd;
                  }
                } catch (Exception e1) {
                  e1.printStackTrace();
                }
              }
            }
          }
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      if (getMaxv() == -999999999) {
        this.maxv = 100;
      } else {
        if (getMaxv() > 0) {
          this.maxv = getMaxv() * 1.05;
        } else {
          this.maxv = getMaxv() * 0.95;
        }
      }
    }
 
    if (this.minv_zd) {
      this.minv = 999999999;
      try {
        if (data != null) {
          for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
              if (data[i][j] != null && !data[i][j].equals("")) {
                try {
                  double mindd = Double.parseDouble( (data[i][j] == null || "null".equals(data[i][j]) || "".equals(data[i][j])) ? "0" : data[i][j]);
                  if (mindd < getMinv()) {
                    this.minv = mindd;
                  }
                } catch (Exception e1) {
                  e1.printStackTrace();
                }
              }
            }
          }
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      if (getMinv() == 999999999) {
        this.minv = 0;
      } else {
        if (getMinv() > 0) {
          this.minv = getMinv() * 0.95;
        } else {
          this.minv = getMinv() * 1.05;
        }
      }
    }
  }
 
  /**
   * @return the Lcol
   */
  public java.awt.Color[] getLcol() {
    return Lcol;
  }
 
  /**
   * @param Lcol the Lcol to set
   */
  public void setLcol(java.awt.Color[] Lcol) {
    this.Lcol = Lcol;
  }
 
  /**
   * @return the maxv
   */
  public double getMaxv() {
    return maxv;
  }
 
  /**
   * @param maxv the maxv to set
   */
  public void setMaxv(double maxv) {
    this.maxv = maxv;
    this.maxv_zd = false;
  }
 
  /**
   * @return the minv
   */
  public double getMinv() {
    return minv;
  }
 
  /**
   * @param minv the minv to set
   */
  public void setMinv(double minv) {
    this.minv = minv;
    this.minv_zd = false;
  }
 
  /**
   * 返回修改的曲線數(shù)據(jù)
   * 2013-04-08 hwh
   * @return 
   */
  public double[] getGraphDataY() {
    return chart.getGraphDataY();
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談fastjson的常用使用方法

    淺談fastjson的常用使用方法

    下面小編就為大家?guī)硪黄獪\談fastjson的常用使用方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • APP轉(zhuǎn)盤抽獎(jiǎng)Java服務(wù)端接口詳解

    APP轉(zhuǎn)盤抽獎(jiǎng)Java服務(wù)端接口詳解

    這篇文章主要為大家詳細(xì)介紹了APP轉(zhuǎn)盤抽獎(jiǎng)Java服務(wù)端接口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺談Java開發(fā)中的安全編碼問題

    淺談Java開發(fā)中的安全編碼問題

    這篇文章主要介紹了淺談Java開發(fā)中的安全編碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • JAVA編程不能不知道的反射用法總結(jié)

    JAVA編程不能不知道的反射用法總結(jié)

    這篇文章主要介紹了Java反射技術(shù)原理與用法,結(jié)合實(shí)例形式分析了Java反射技術(shù)的基本概念、功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2021-07-07
  • SpringBoot雪花算法主鍵ID傳到前端后精度丟失問題的解決

    SpringBoot雪花算法主鍵ID傳到前端后精度丟失問題的解決

    本文主要介紹了SpringBoot雪花算法主鍵ID傳到前端后精度丟失問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • AJAX省市區(qū)三級(jí)聯(lián)動(dòng)下拉菜單(java版)

    AJAX省市區(qū)三級(jí)聯(lián)動(dòng)下拉菜單(java版)

    這篇文章主要介紹了AJAX省市區(qū)三級(jí)聯(lián)動(dòng)下拉菜單(java版)的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 搭建公司私有MAVEN倉庫的方法

    搭建公司私有MAVEN倉庫的方法

    這篇文章主要介紹了搭建公司私有MAVEN倉庫的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java實(shí)現(xiàn)簡(jiǎn)單抽獎(jiǎng)功能界面

    Java實(shí)現(xiàn)簡(jiǎn)單抽獎(jiǎng)功能界面

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單抽獎(jiǎng)功能界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • CentOS8.2安裝Java 14.0.2的教程詳解

    CentOS8.2安裝Java 14.0.2的教程詳解

    這篇文章主要介紹了CentOS8.2安裝Java 14.0.2的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫方式

    Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫方式

    這篇文章主要介紹了Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論