参考
Read a data file into a JTable
The first line of the data file contains the column names. Fields are separated by the "|" character. [customers.dat]
Id|Name|City|Phone
102|Beth Reiser|New York|(212)5558725
111|Dylan Ricci|Syracuse|(315)5554486
116|Brian Gugliuzza|Mamaroneck|(914)5553817
120|Gertrude Stein|Elmsford|(914)5553476
131|Daljit Sinnot|Bohemia|(516)5559811
First we need a TableModel to define the data structure to used by the JTable. [DataFileTableModel.java]
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.io.*;
import java.util.*;public class DataFileTableModel extends AbstractTableModel {
protected Vector data;
protected Vector columnNames ;
protected String datafile;
public DataFileTableModel(String f){
datafile = f;
initVectors();
} public void initVectors() {
String aLine ;
data = new Vector();
columnNames = new Vector();
try {
FileInputStream fin = new FileInputStream(datafile);
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
// extract column names
StringTokenizer st1 =
new StringTokenizer(br.readLine(), "|");
while(st1.hasMoreTokens())
columnNames.addElement(st1.nextToken());
// extract data
while ((aLine = br.readLine()) != null) {
StringTokenizer st2 =
new StringTokenizer(aLine, "|");
while(st2.hasMoreTokens())
data.addElement(st2.nextToken());
}
br.close();
}
catch (Exception e) {
e.printStackTrace();
}
} public int getRowCount() {
return data.size() / getColumnCount();
} public int getColumnCount(){
return columnNames.size();
} public String getColumnName(int columnIndex) {
String colName = ""; if (columnIndex <= getColumnCount())
colName = (String)columnNames.elementAt(columnIndex); return colName;
}
public Class getColumnClass(int columnIndex){
return String.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return (String)data"404.php3" tppabs="http://www.rgagnon.com/javadetails/.elementAt(" (rowIndex * getColumnCount()) + columnIndex);
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
return;
}
}
[DataFileTable.java]
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;public class DataFileTable extends JPanel {
public DataFileTable(String dataFilePath) {
JTable table;
DataFileTableModel model;
Font f; f = new Font("SanSerif",Font.PLAIN,24);
setFont(f);
setLayout(new BorderLayout()); model = new DataFileTableModel(dataFilePath); table = new JTable();
table.setModel(model);
table.createDefaultColumnsFromModel(); JScrollPane scrollpane = new JScrollPane(table);
add(scrollpane);
} public Dimension getPreferredSize(){
return new Dimension(400, 300);
}
public static void main(String s[]) {
JFrame frame = new JFrame("Data File Table");
DataFileTable panel;
panel = new DataFileTable("customers.dat"); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setForeground(Color.black);
frame.setBackground(Color.lightGray);
frame.getContentPane().add(panel,"Center");
frame.setSize(panel.getPreferredSize());
frame.setVisible(true);
frame.addWindowListener(new WindowCloser());
}
}class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent e) {
Window win = e.getWindow();
win.setVisible(false);
System.exit(0);
}
}
Read a data file into a JTable
The first line of the data file contains the column names. Fields are separated by the "|" character. [customers.dat]
Id|Name|City|Phone
102|Beth Reiser|New York|(212)5558725
111|Dylan Ricci|Syracuse|(315)5554486
116|Brian Gugliuzza|Mamaroneck|(914)5553817
120|Gertrude Stein|Elmsford|(914)5553476
131|Daljit Sinnot|Bohemia|(516)5559811
First we need a TableModel to define the data structure to used by the JTable. [DataFileTableModel.java]
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.io.*;
import java.util.*;public class DataFileTableModel extends AbstractTableModel {
protected Vector data;
protected Vector columnNames ;
protected String datafile;
public DataFileTableModel(String f){
datafile = f;
initVectors();
} public void initVectors() {
String aLine ;
data = new Vector();
columnNames = new Vector();
try {
FileInputStream fin = new FileInputStream(datafile);
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
// extract column names
StringTokenizer st1 =
new StringTokenizer(br.readLine(), "|");
while(st1.hasMoreTokens())
columnNames.addElement(st1.nextToken());
// extract data
while ((aLine = br.readLine()) != null) {
StringTokenizer st2 =
new StringTokenizer(aLine, "|");
while(st2.hasMoreTokens())
data.addElement(st2.nextToken());
}
br.close();
}
catch (Exception e) {
e.printStackTrace();
}
} public int getRowCount() {
return data.size() / getColumnCount();
} public int getColumnCount(){
return columnNames.size();
} public String getColumnName(int columnIndex) {
String colName = ""; if (columnIndex <= getColumnCount())
colName = (String)columnNames.elementAt(columnIndex); return colName;
}
public Class getColumnClass(int columnIndex){
return String.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return (String)data"404.php3" tppabs="http://www.rgagnon.com/javadetails/.elementAt(" (rowIndex * getColumnCount()) + columnIndex);
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
return;
}
}
[DataFileTable.java]
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;public class DataFileTable extends JPanel {
public DataFileTable(String dataFilePath) {
JTable table;
DataFileTableModel model;
Font f; f = new Font("SanSerif",Font.PLAIN,24);
setFont(f);
setLayout(new BorderLayout()); model = new DataFileTableModel(dataFilePath); table = new JTable();
table.setModel(model);
table.createDefaultColumnsFromModel(); JScrollPane scrollpane = new JScrollPane(table);
add(scrollpane);
} public Dimension getPreferredSize(){
return new Dimension(400, 300);
}
public static void main(String s[]) {
JFrame frame = new JFrame("Data File Table");
DataFileTable panel;
panel = new DataFileTable("customers.dat"); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setForeground(Color.black);
frame.setBackground(Color.lightGray);
frame.getContentPane().add(panel,"Center");
frame.setSize(panel.getPreferredSize());
frame.setVisible(true);
frame.addWindowListener(new WindowCloser());
}
}class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent e) {
Window win = e.getWindow();
win.setVisible(false);
System.exit(0);
}
}
model = new DataFileTableModel(dataFilePath); table = new JTable();
table.setModel(model);
table.createDefaultColumnsFromModel();
他说的这个例子是读一个文件的内容,以标记划分来作为不同的CELL的数据,看懂了可以解决你提出的问题的:)
是什么意思呢?
public Object getValueAt(int rowIndex, int columnIndex) {
return (String)data.elementAt((rowIndex * getColumnCount()) + columnIndex);
}
SQLException: 无效的列索引: getValidColumnIndex
SQLState: null
Message: 无效的列索引: getValidColumnIndex
Vendor: 17003修改后的代码如下
******************************************
[commontablemodel1.java]
package gistar.classes;import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.util.*;
import java.lang.*;
import java.math.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import javax.swing.JFrame;public class commontablemodel1 extends AbstractTableModel {
protected Vector data;
protected Vector columnnames ;
protected ResultSet rs;
public commontablemodel1(ResultSet inputrs){
rs=inputrs;
initVectors();
} public void initVectors() {
data = new Vector();
columnnames = new Vector();
int i;
try {
ResultSetMetaData rsmd = rs.getMetaData();
for (i=0;i<rsmd.getColumnCount();i++)
System.out.println(rsmd.getColumnName(i));
columnnames.addElement(rsmd.getColumnName(i));
while(rs.next())
{
for (i=0;i<rsmd.getColumnCount();i++)
data.addElement(rs.getObject(i));
}
}
catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
System.err.println("SQLState: " + ex.getSQLState());
System.err.println("Message: " + ex.getMessage());
System.err.println("Vendor: " + ex.getErrorCode());
}
} public int getRowCount() {
if (getColumnCount()>0)
return data.size() / getColumnCount();
else
return 0;
} public int getColumnCount(){
return columnnames.size();
} public String getColumnName(int columnIndex) {
String colName = ""; if (columnIndex <= getColumnCount())
colName = (String)columnnames.elementAt(columnIndex); return colName;
}
public Class getColumnClass(int columnIndex){
return String.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return (String)data.elementAt(rowIndex * getColumnCount() + columnIndex);
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
return;
}
}**************************************************************************
[frmMdi.java]
package gistar.classes;import java.lang.*;
import java.util.*;
import java.sql.*;
import java.math.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import oracle.jdbc.driver.*;import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JOptionPane;public class frmMdi extends JFrame implements ActionListener {
JTable Btable;
JScrollPane scrollpane1;
public frmMdi(){
super("Ïß·×ÊÔ´¹ÜÀíϵͳ");
addWindowListener(new Wadapt());
setSize(600,500);
getContentPane().setLayout(new FlowLayout());
jinit();
//setVisible(true);
}
private void jinit(){
JMenuBar mb=new JMenuBar();
setJMenuBar(mb); JMenu filemenu=new JMenu("File");
mb.add(filemenu);
JMenuItem miLoginOut=new JMenuItem("Login");
miLoginOut.addActionListener(this);
filemenu.add(miLoginOut);
JMenuItem miExit=new JMenuItem("Exit");
miExit.addActionListener(this);
filemenu.add(miExit);
JMenuItem miFixSearch=new JMenuItem("search");
miFixSearch.addActionListener(this);
filemenu.add(miFixSearch);
//Create the scroll pane and add the table to it.
Btable=new JTable();
Btable.createDefaultColumnsFromModel();
Btable.setPreferredScrollableViewportSize(new Dimension(500, 400));
scrollpane1 = new JScrollPane(Btable); //Add the scroll pane to this window.
getContentPane().add(scrollpane1, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent evt){
if (((JMenuItem)(evt.getSource())).getText()=="search"){
search();
}
if (((JMenuItem)evt.getSource()).getText()=="Í˳ö"){
System.exit(0);
}
}
private void search(){
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("java:oracle:thin:@192.168.200.103:1521:orical","hz","hz");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM BUILDING" );
commontablemodel1 model=new commontablemodel1(rs);
Btable.setModel(model);
//table.createDefaultColumnsFromModel();
//commontablemodel Btablemodel = new commontablemodel(rs,this);
scrollpane1.setViewportView(Btable);
rs.close();
stmt.close();
conn.close();
}
catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
System.err.println("SQLState: " + ex.getSQLState());
System.err.println("Message: " + ex.getMessage());
System.err.println("Vendor: " + ex.getErrorCode());
}
}
}
class Wadapt extends WindowAdapter{
public void windowClosing(WindowEvent evt){
Frame frm=(Frame)evt.getSource();
frm.setVisible(false);
frm.dispose();
System.exit(0);
}
}