我使用jScrollPane但是还是没发解决,下面的滑动条也是会隐藏,必须点击下才会出现。
我这个作用是做个生成可滑动的报表的applet
package com.linewell.zjywcx.ajax;import java.awt.*;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.event.ChartProgressEvent;
import org.jfree.chart.event.ChartProgressListener;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.Range;
import org.jfree.data.time.*;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.*;import com.sun.rsasign.j;/**
* @author [email protected] Jun 16, 200810:50:31 AM
*/
public class DemoDataApplet extends JApplet implements ChangeListener,
ChartProgressListener {
/**
*
*/
private static final long serialVersionUID = 2L; static class DemoTableModel extends AbstractTableModel implements
TableModel { /**
*
*/
private static final long serialVersionUID = 1L;
private Object data[][]; public int getColumnCount() {
return 7;
} public int getRowCount() {
return 1;
} public Object getValueAt(int i, int j) {
return data[i][j];
} public void setValueAt(Object obj, int i, int j) {
data[i][j] = obj;
fireTableDataChanged();
} public String getColumnName(int i) {
switch (i) {
case 0: // '\0'
return "监测项"; case 1: // '\001'
return "当前时间"; case 2: // '\002'
return "参数值"; case 3: // '\003'
return "时间(prev)"; case 4: // '\004'
return "参数值(prev)"; case 5: // '\005'
return "时间(next)"; case 6: // '\006'
return "参数值(next)";
}
return null;
} public DemoTableModel(int i) {
data = new Object[i][7];
}
} private XYLineAndShapeRenderer xyitemrenderer; private ChartPanel chartPanel; private JFreeChart jfreechart; private JPanel jpanel; private TimeSeries series; private DemoTableModel model; private JFreeChart chart; private JSlider slider; private String[][] rs; private String TimeSeriresName = ""; private String modelYear = ""; private String modelChart = ""; public DemoDataApplet() {
chartPanel = null;
jfreechart = null;
jpanel = null;
} public void init() {
String substr = null;
String tablename = this.getParameter("tablename");
String itemName = this.getParameter("itemName");
String begin = this.getParameter("begin");
String end = this.getParameter("end");
String collectionPoint = this.getParameter("collectionPoint");
TimeSeriresName = this.getParameter("TimeSeriresName");
modelYear = this.getParameter("model");
switch (Integer.parseInt(modelYear)) {
case 0: // '\0'
modelChart = "year";
substr="substr(submittime,0,4)";
break; case 1: // '\001'
modelChart = "month";
substr="substr(submittime,0,7)";
break; case 2: // '\002'
modelChart = "day";
substr="substr(submittime,0,10)";
break; case 3: // '\003'
modelChart = "hour";
substr="substr(submittime,0,13)";
break; default:
modelChart = "hour";
substr="substr(submittime,0,13)";
break;
} if (modelChart == null)
modelChart = "month"; URL url=null;
//获取数据
try {
url = new URL(getCodeBase(), "../../zjywcx" + "/GetNewAutotime?"
+ "substr=" + substr + "&tablename=" + tablename
+ "&itemName=" + itemName + "&begin="
+ URLEncoder.encode(begin) + "&end="
+ URLEncoder.encode(end)+"&collectionPoint="+collectionPoint);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
ObjectInputStream objStream = null;
objStream = new ObjectInputStream(url.openStream());
rs = (String[][]) objStream.readObject();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Container c = getContentPane();
this.jpanel = new JPanel();
c.setLayout(new BorderLayout());
chart = createChart();
chart.addProgressListener(this);
chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(680, 340));
chartPanel.setDomainZoomable(true);
chartPanel.setRangeZoomable(true);
javax.swing.border.CompoundBorder compoundborder = BorderFactory
.createCompoundBorder(BorderFactory.createEmptyBorder(4, 4, 4,
4), BorderFactory.createEtchedBorder());
chartPanel.setBorder(compoundborder);
JPanel jpanel = new JPanel(new BorderLayout());
jpanel.setPreferredSize(new Dimension(680, 60));
jpanel.setBorder(BorderFactory.createEmptyBorder(0, 4, 4, 4));
jpanel.setBackground(Color.LIGHT_GRAY);
jpanel.setCursor(this.getCursor());
model = new DemoTableModel(3);
XYPlot xyplot = (XYPlot) chart.getPlot();
model.setValueAt(xyplot.getDataset().getSeriesKey(0), 0, 0);
model.setValueAt(new Double("0.00"), 0, 1);
model.setValueAt(new Double("0.00"), 0, 2);
model.setValueAt(new Double("0.00"), 0, 3);
model.setValueAt(new Double("0.00"), 0, 4);
model.setValueAt(new Double("0.00"), 0, 5);
model.setValueAt(new Double("0.00"), 0, 6);
JTable jtable = new JTable(model);
DateCellRenderer datecellrenderer = new DateCellRenderer(
new SimpleDateFormat("yyyy-MM-dd HH:mm"));
NumberCellRenderer numbercellrenderer = new NumberCellRenderer();
jtable.getColumnModel().getColumn(1).setCellRenderer(datecellrenderer);
jtable.getColumnModel().getColumn(2)
.setCellRenderer(numbercellrenderer);
jtable.getColumnModel().getColumn(3).setCellRenderer(datecellrenderer);
jtable.getColumnModel().getColumn(4)
.setCellRenderer(numbercellrenderer);
jtable.getColumnModel().getColumn(5).setCellRenderer(datecellrenderer);
jtable.getColumnModel().getColumn(6)
.setCellRenderer(numbercellrenderer);
jtable.setPreferredScrollableViewportSize(new Dimension(500, 70));
jtable.getTableHeader().setReorderingAllowed(false);
// jtable.getTableHeader().setFocusable(true);
// jtable.getTableHeader().setVisible(true);
// jtable.getTableHeader().show();
JScrollPane jScrollPane=new JScrollPane(jtable);
jScrollPane.setOpaque(true);
//jScrollPane.getColumnHeader().setOpaque(false);
jpanel.add(jScrollPane);
jpanel.setOpaque(false);
slider = new JSlider(0, 100, 50);
slider.addChangeListener(this);
jpanel.add(slider, "South");
c.add(chartPanel);
c.add(jpanel, "South");
}
我这个作用是做个生成可滑动的报表的applet
package com.linewell.zjywcx.ajax;import java.awt.*;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.event.ChartProgressEvent;
import org.jfree.chart.event.ChartProgressListener;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.Range;
import org.jfree.data.time.*;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.*;import com.sun.rsasign.j;/**
* @author [email protected] Jun 16, 200810:50:31 AM
*/
public class DemoDataApplet extends JApplet implements ChangeListener,
ChartProgressListener {
/**
*
*/
private static final long serialVersionUID = 2L; static class DemoTableModel extends AbstractTableModel implements
TableModel { /**
*
*/
private static final long serialVersionUID = 1L;
private Object data[][]; public int getColumnCount() {
return 7;
} public int getRowCount() {
return 1;
} public Object getValueAt(int i, int j) {
return data[i][j];
} public void setValueAt(Object obj, int i, int j) {
data[i][j] = obj;
fireTableDataChanged();
} public String getColumnName(int i) {
switch (i) {
case 0: // '\0'
return "监测项"; case 1: // '\001'
return "当前时间"; case 2: // '\002'
return "参数值"; case 3: // '\003'
return "时间(prev)"; case 4: // '\004'
return "参数值(prev)"; case 5: // '\005'
return "时间(next)"; case 6: // '\006'
return "参数值(next)";
}
return null;
} public DemoTableModel(int i) {
data = new Object[i][7];
}
} private XYLineAndShapeRenderer xyitemrenderer; private ChartPanel chartPanel; private JFreeChart jfreechart; private JPanel jpanel; private TimeSeries series; private DemoTableModel model; private JFreeChart chart; private JSlider slider; private String[][] rs; private String TimeSeriresName = ""; private String modelYear = ""; private String modelChart = ""; public DemoDataApplet() {
chartPanel = null;
jfreechart = null;
jpanel = null;
} public void init() {
String substr = null;
String tablename = this.getParameter("tablename");
String itemName = this.getParameter("itemName");
String begin = this.getParameter("begin");
String end = this.getParameter("end");
String collectionPoint = this.getParameter("collectionPoint");
TimeSeriresName = this.getParameter("TimeSeriresName");
modelYear = this.getParameter("model");
switch (Integer.parseInt(modelYear)) {
case 0: // '\0'
modelChart = "year";
substr="substr(submittime,0,4)";
break; case 1: // '\001'
modelChart = "month";
substr="substr(submittime,0,7)";
break; case 2: // '\002'
modelChart = "day";
substr="substr(submittime,0,10)";
break; case 3: // '\003'
modelChart = "hour";
substr="substr(submittime,0,13)";
break; default:
modelChart = "hour";
substr="substr(submittime,0,13)";
break;
} if (modelChart == null)
modelChart = "month"; URL url=null;
//获取数据
try {
url = new URL(getCodeBase(), "../../zjywcx" + "/GetNewAutotime?"
+ "substr=" + substr + "&tablename=" + tablename
+ "&itemName=" + itemName + "&begin="
+ URLEncoder.encode(begin) + "&end="
+ URLEncoder.encode(end)+"&collectionPoint="+collectionPoint);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
ObjectInputStream objStream = null;
objStream = new ObjectInputStream(url.openStream());
rs = (String[][]) objStream.readObject();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Container c = getContentPane();
this.jpanel = new JPanel();
c.setLayout(new BorderLayout());
chart = createChart();
chart.addProgressListener(this);
chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(680, 340));
chartPanel.setDomainZoomable(true);
chartPanel.setRangeZoomable(true);
javax.swing.border.CompoundBorder compoundborder = BorderFactory
.createCompoundBorder(BorderFactory.createEmptyBorder(4, 4, 4,
4), BorderFactory.createEtchedBorder());
chartPanel.setBorder(compoundborder);
JPanel jpanel = new JPanel(new BorderLayout());
jpanel.setPreferredSize(new Dimension(680, 60));
jpanel.setBorder(BorderFactory.createEmptyBorder(0, 4, 4, 4));
jpanel.setBackground(Color.LIGHT_GRAY);
jpanel.setCursor(this.getCursor());
model = new DemoTableModel(3);
XYPlot xyplot = (XYPlot) chart.getPlot();
model.setValueAt(xyplot.getDataset().getSeriesKey(0), 0, 0);
model.setValueAt(new Double("0.00"), 0, 1);
model.setValueAt(new Double("0.00"), 0, 2);
model.setValueAt(new Double("0.00"), 0, 3);
model.setValueAt(new Double("0.00"), 0, 4);
model.setValueAt(new Double("0.00"), 0, 5);
model.setValueAt(new Double("0.00"), 0, 6);
JTable jtable = new JTable(model);
DateCellRenderer datecellrenderer = new DateCellRenderer(
new SimpleDateFormat("yyyy-MM-dd HH:mm"));
NumberCellRenderer numbercellrenderer = new NumberCellRenderer();
jtable.getColumnModel().getColumn(1).setCellRenderer(datecellrenderer);
jtable.getColumnModel().getColumn(2)
.setCellRenderer(numbercellrenderer);
jtable.getColumnModel().getColumn(3).setCellRenderer(datecellrenderer);
jtable.getColumnModel().getColumn(4)
.setCellRenderer(numbercellrenderer);
jtable.getColumnModel().getColumn(5).setCellRenderer(datecellrenderer);
jtable.getColumnModel().getColumn(6)
.setCellRenderer(numbercellrenderer);
jtable.setPreferredScrollableViewportSize(new Dimension(500, 70));
jtable.getTableHeader().setReorderingAllowed(false);
// jtable.getTableHeader().setFocusable(true);
// jtable.getTableHeader().setVisible(true);
// jtable.getTableHeader().show();
JScrollPane jScrollPane=new JScrollPane(jtable);
jScrollPane.setOpaque(true);
//jScrollPane.getColumnHeader().setOpaque(false);
jpanel.add(jScrollPane);
jpanel.setOpaque(false);
slider = new JSlider(0, 100, 50);
slider.addChangeListener(this);
jpanel.add(slider, "South");
c.add(chartPanel);
c.add(jpanel, "South");
}
public void paint(Graphics g) {
chartPanel.repaint();
jpanel.repaint();
} private JFreeChart createChart() {
XYDataset xydataset = createDataset("Random 1", 100D, new Minute(), 200);
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(
"历 史 数 据 查 询", "", "值 据 数 标 指 ", xydataset, true, true, false);
jfreechart.setBackgroundPaint(Color.white);
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
xyplot.setOrientation(PlotOrientation.VERTICAL);
xyplot.setBackgroundPaint(Color.BLACK);
xyplot.setDomainGridlinePaint(new Color(0xFFD700));
xyplot.setRangeGridlinePaint(new Color(0xFFD700));
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
NumberAxis numAxis = (NumberAxis) xyplot.getRangeAxis(); // 获得数值域
DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis(); // 获得时间域
numAxis.setLabelFont(new Font("宋体", Font.BOLD, 12));
numAxis.setTickLabelFont(new Font("隶书", Font.BOLD, 10)); // 设置刻度的字体
dateaxis.setTickLabelFont(new Font("隶书", Font.BOLD, 10));
xyplot.setDomainCrosshairVisible(true);
xyplot.setDomainCrosshairLockedOnData(false);
xyplot.setDomainCrosshairPaint(Color.green);
xyplot.setRangeCrosshairVisible(false);
XYItemRenderer xyitemrenderer = xyplot.getRenderer();
xyitemrenderer.setSeriesPaint(0, Color.red);
return jfreechart;
} private XYDataset createDataset(String s, double d,
RegularTimePeriod regulartimeperiod, int i) {
series = null;
if (modelChart.equals("year"))
series = new TimeSeries(TimeSeriresName, Year.class);
if (modelChart.equals("month"))
series = new TimeSeries(TimeSeriresName, Month.class);
if (modelChart.equals("day"))
series = new TimeSeries(TimeSeriresName, Day.class);
if (modelChart.equals("hour"))
series = new TimeSeries(TimeSeriresName, Hour.class);
for (int j = 1; j < rs.length; j++) {
String time = rs[j][0].toString();
if (modelChart.equals("hour"))
series.add(new Hour(Integer.parseInt(time.substring(11, 13)),
Integer.parseInt(time.substring(8, 10)), Integer
.parseInt(time.substring(5, 7)), Integer
.parseInt(time.substring(0, 4))), new Double(
Double.parseDouble(rs[j][1].toString())));
if (modelChart.equals("month"))
series.add(new Month(Integer.parseInt(time.substring(5, 7)),
Integer.parseInt(time.substring(0, 4))), new Double(
Double.parseDouble(rs[j][1].toString())));
if (modelChart.equals("day"))
series.add(new Day(Integer.parseInt(time.substring(8, 10)),
Integer.parseInt(time.substring(5, 7)), Integer
.parseInt(time.substring(0, 4))), new Double(
Double.parseDouble(rs[j][1].toString())));
if (modelChart.equals("year"))
series.add(new Year(Integer.parseInt(time.substring(0, 4))),
new Double(Double.parseDouble(rs[j][1].toString())));
} TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(series);
return timeseriescollection;
} public void stateChanged(ChangeEvent changeevent) {
int i = slider.getValue();
XYPlot xyplot = (XYPlot) chart.getPlot();
ValueAxis valueaxis = xyplot.getDomainAxis();
Range range = valueaxis.getRange();
double d = valueaxis.getLowerBound() + ((double) i / 100D)
* range.getLength();
xyplot.setDomainCrosshairValue(d);
} public void chartProgress(ChartProgressEvent chartprogressevent) {
if (chartprogressevent.getType() != 2)
return;
if (chartPanel != null) {
JFreeChart jfreechart = chartPanel.getChart();
if (jfreechart != null) {
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
XYDataset xydataset = xyplot.getDataset();
Comparable comparable = xydataset.getSeriesKey(0);
double d = xyplot.getDomainCrosshairValue();
model.setValueAt(comparable, 0, 0);
long l = (long) d;
model.setValueAt(new Long(l), 0, 1);
int i = 0;
if (modelChart.equals("hour"))
i = series.getIndex(new Hour(new Date(l)));
if (modelChart.equals("month"))
i = series.getIndex(new Month(new Date(l)));
if (modelChart.equals("day"))
i = series.getIndex(new Day(new Date(l)));
if (modelChart.equals("year"))
i = series.getIndex(new Year(new Date(l)));
if (i >= 0) {
TimeSeriesDataItem timeseriesdataitem = series
.getDataItem(Math.min(199, Math.max(0, i)));
TimeSeriesDataItem timeseriesdataitem1 = series
.getDataItem(Math.max(0, i - 1));
TimeSeriesDataItem timeseriesdataitem2 = series
.getDataItem(Math.min(199, i + 1));
long l1 = timeseriesdataitem.getPeriod()
.getMiddleMillisecond();
double d1 = timeseriesdataitem.getValue().doubleValue();
long l2 = timeseriesdataitem1.getPeriod()
.getMiddleMillisecond();
double d2 = timeseriesdataitem1.getValue().doubleValue();
long l3 = timeseriesdataitem2.getPeriod()
.getMiddleMillisecond();
double d3 = timeseriesdataitem2.getValue().doubleValue();
model.setValueAt(new Long(l1), 0, 1);
model.setValueAt(new Double(d1), 0, 2);
model.setValueAt(new Long(l2), 0, 3);
model.setValueAt(new Double(d2), 0, 4);
model.setValueAt(new Long(l3), 0, 5);
model.setValueAt(new Double(d3), 0, 6);
}
}
}
} public void update(Graphics g) {
paint(g);
}
}
JTable table = new JTable();
JScrollPane scrollPane = new JScrollPane();
Vector<String> tableData = new Vector<String>();
Vector<String[]> rowData=new Vector<String[]>();
DefaultTableModel model=(DefaultTableModel) table.getModel();
model.setDataVector(rowData, tableData); scrollPane.getViewport().add(table,null);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
//添加表头
model.addColumn("姓名");
model.addColumn("性别"); //添加行数据
model.addRow(new String[]{"刘德华","45"});
可以使用这种方式,DefaultTableModel 的addColumn()、addRow()方法添加数据很灵活和方便。