我使用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");
}

解决方案 »

  1.   

    接上
    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);
    }
    }
      

  2.   


    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()方法添加数据很灵活和方便。