package test; import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Font; import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JLayeredPane; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 
import javax.swing.table.TableModel; import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.category.DefaultCategoryDataset; public class Test { 
static class DemoTableModel extends AbstractTableModel implements TableModel{ 
private Object[][] data; 
public DemoTableModel(int rows,int column) { 
this.data = new Object[rows][column]; 

public int getColumnCount() { 
return 16; 

public int getRowCount() { 
return this.data.length; 

public Object getValueAt(int row, int column) { 
return this.data[row][column]; 

public void setValueAt(Object value, int row, int column) { 
this.data[row][column] = value; 
fireTableDataChanged(); 

public String getColumnName(int column) { return null; 
} } 
public static JTable getJTable(int row,int column){ 
DemoTableModel model=new DemoTableModel(row,column); 
JTable jtable=new JTable(model); 
return jtable; 
} public static void main(String args[]) { 
String[] str = new String[16]; 
        for(int i=1;i <13;i++){ 
        str[i-1] = "08" + (i <10?("0"+i):""+i); 
        } 
        str[12] = "0901"; 
        str[13] = "0902"; 
        str[14] = "0903"; 
        str[15] = "0904"; 
        // 折点值 
        float[] value = new float[16]; 
        for(int i=0;i <value.length;i++){ 
        value[i] = i+2; 
        } DefaultCategoryDataset dgd = new DefaultCategoryDataset(); 
for (int i = 0; i < value.length; i++) { 
dgd.addValue(value[i], "2007年", str[i]); 

JFreeChart jfc=ChartFactory.createLineChart("标题", "一", 
"二", 
dgd, PlotOrientation.VERTICAL, 
true, true, false); //按曲线图创建chartPanel 
ChartPanel chartPanel=new ChartPanel(jfc); JPanel content = new JPanel(new BorderLayout()); 
content.add(chartPanel,BorderLayout.CENTER); 
//JLayeredPane  jlp=new JLayeredPane(); 
//jlp.add(chartPanel,new Integer(100)); //创建table 
JTable jtable=getJTable(3,value.length+1); 
JPanel tablePanel = new JPanel(new BorderLayout()); 
tablePanel.setPreferredSize(new Dimension(800, 52)); 
tablePanel.add(new JScrollPane(jtable)); 
jtable.setValueAt("黄色标题", 0, 0); 
jtable.setValueAt("蓝色标题", 1, 0); 
jtable.setValueAt("红色标题", 2, 0); 
content.add(tablePanel, BorderLayout.SOUTH); //jlp.add(tablePanel,new Integer(50)); 
//chartPanel.setBounds(100, 100, 100, 100); 
//tablePanel.setBounds(50, 50, 100, 100); JFrame jf=new JFrame(); 
jf.add(content); 
//jf.add(jlp); 
jf.pack(); 
jf.setVisible(true); 


我注释掉的地方是想用JLayeredPane 来将2个组件进行重叠布局,然后要求表格要紧挨着曲线图下面(可以覆盖掉年份),然后在Java代码里面将标题颜色改用Font对象实现字体颜色,哪个高手指点一下。

解决方案 »

  1.   

    是的,怎么?你会么?会的教下,JFreeChart我根本不会,现学的,然后Swing2年前以前做过一个记事本早忘记完了。
      

  2.   


    package test1;import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;import javax.swing.JFrame;
    import javax.swing.JLayeredPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableModel;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.title.TextTitle;
    import org.jfree.data.category.DefaultCategoryDataset;public class Test {
    static class DemoTableModel extends AbstractTableModel implements
    TableModel {
    private Object[][] data; public DemoTableModel(int rows, int column) {
    this.data = new Object[rows][column];
    } public int getColumnCount() {
    return 16;
    } public int getRowCount() {
    return this.data.length;
    } public Object getValueAt(int row, int column) {
    return this.data[row][column];
    } public void setValueAt(Object value, int row, int column) {
    this.data[row][column] = value;
    fireTableDataChanged();
    } public String getColumnName(int column) { return null;
    } } public static JTable getJTable(int row, int column) {
    DemoTableModel model = new DemoTableModel(row, column);
    JTable jtable = new JTable(model);
    return jtable;
    } public static void main(String args[]) {
    String[] str = new String[16];
    for (int i = 1; i < 13; i++) {
    str[i - 1] = "08" + (i < 10 ? ("0" + i) : "" + i);
    }
    str[12] = "0901";
    str[13] = "0902";
    str[14] = "0903";
    str[15] = "0904";
    // 折点值
    float[] value = new float[16];
    for (int i = 0; i < value.length; i++) {
    value[i] = i + 2;
    } DefaultCategoryDataset dgd = new DefaultCategoryDataset();
    for (int i = 0; i < value.length; i++) {
    dgd.addValue(value[i], "2007年", str[i]);
    }
    JFreeChart jfc = ChartFactory.createLineChart("", "X", "Y", dgd,
    PlotOrientation.VERTICAL, true, true, false);

    Font font = new Font("宋体", Font.BOLD, 16); 
    TextTitle t = new TextTitle("title",font);
    t.setPaint(Color.RED);
    jfc.setTitle(t);

    JLayeredPane jlp=new JLayeredPane();
    jlp.setLayout(new BorderLayout());

    // 按曲线图创建chartPanel
    ChartPanel chartPanel = new ChartPanel(jfc);
    chartPanel.setBounds(100, 100, 100, 100); JPanel content = new JPanel(new BorderLayout());
    content.add(chartPanel, BorderLayout.CENTER); // 创建table
    JTable jtable = getJTable(3, value.length + 1);
    JPanel tablePanel = new JPanel(new BorderLayout());
    tablePanel.setBounds(50, 50, 100, 100);
    tablePanel.setPreferredSize(new Dimension(800, 52));
    tablePanel.add(new JScrollPane(jtable));
    jtable.setValueAt("黄色标题", 0, 0);
    jtable.setValueAt("蓝色标题", 1, 0);
    jtable.setValueAt("红色标题", 2, 0);
    content.add(tablePanel, BorderLayout.CENTER);


    jlp.add(chartPanel,BorderLayout.CENTER);
    jlp.add(tablePanel,BorderLayout.SOUTH);
    jlp.setSize(850, 500);

    JFrame jf = new JFrame();
    jf.setLayout(null);
    jf.add(jlp);
    jf.pack();
    jf.setSize(900, 600);
    jf.setVisible(true);

    }
    }