📄 guitable.java
字号:
//本类是打印报表类,实例化本类的对象则产生一个报表打印窗口;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class GUITable extends JFrame{
public GUITable(){}
public GUITable(int language){
super((language==0)?"Table Look And Edit Application" :"税务报表查看编辑器");
language=language;
setSize( 900, 350 );
cont = getContentPane();
initControls();
initTable();
show();
}
//对窗口上的各种按钮初始化
public void initControls(){
JButton b;
JPanel controls = new JPanel();
controls.setLayout( new FlowLayout() );
b = addButton( controls, readString[language] );
b.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
JFileChooser fc = new JFileChooser();
int choice = fc.showOpenDialog( new JFrame() );
if ( choice == JFileChooser.APPROVE_OPTION )
infileName = fc.getSelectedFile().getName();
else
return; //*** user hit CANCEL button
read(); }
} );
b = addButton( controls, writeString[language] );
b.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) { write(); }
} );
b = addButton( controls, exitString[language] );
b.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.exit( 0 ); }
} );
cont.add( controls, BorderLayout.NORTH );
}
//报表,则自然用到表,下面就是初始化表的代码了
public void initTable(){
String[ ] cols = { "MIN" ,"MAX", "TAXRATE" };
dm = new DefaultTableModel( cols,0);
table = new JTable( dm );
table.getTableHeader().setFont( new Font( "Dialog",
Font.BOLD, 12 ) );
cont.add( new JScrollPane( table ), BorderLayout.CENTER );
read();
}
private JButton addButton( JPanel p, String name ) {
JButton b = new JButton( name );
b.setFont( new Font( "Dialog", Font.BOLD, 14 ) );
p.add( b );
return b;
}
//报表的数据从何而来,从文件而来,下面就是读文件的函数
//同时这里就是printandmodify类中调用的read函数了,不过他还不是最底层的代码哦
private void read() {
clearRows();
Emp t=null;
String []rowNum;
/*JFileChooser fc = new JFileChooser();
int choice = fc.showOpenDialog( new JFrame() );
if ( choice == JFileChooser.APPROVE_OPTION )
infileName = fc.getSelectedFile().getName();
else
return; //*** user hit CANCEL button*/
String outfileName = "out for"+infileName;
printAndModify = new PrintAndModify( infileName, outfileName );
printAndModify.read();
Enumeration e = printAndModify.getEmps().elements();
// dm.addRow((Emp)e.getFieldValues());
while ( e.hasMoreElements() ) {
t = (Emp) e.nextElement();
rowNum=new String[3];
rowNum[0]=t.fields[0];
rowNum[1]=t.fields[2];
rowNum[2]=t.fields[3];
dm.addRow( rowNum ); //*** polymorphic
}
/* for (Enumeration e = printAndModify.getEmps().elements() ; e.hasMoreElements() ;) {
t = (Emp)e.nextElement();;
dm.addRow( t.getFieldValues() );
}*/
}
//** Use an EmpRW object to write records from the JTable
// to a specified file.
//这里就是printandmodify类中调用的write函数了,将修改后数据存入文件
private void write() {
Enumeration e = dm.getDataVector().elements();
Vector records = new Vector();
while ( e.hasMoreElements() ) {
Vector fields = (Vector) e.nextElement();
String t = "";
Enumeration e2 = fields.elements();
while ( e2.hasMoreElements() ) {
String s = (String) e2.nextElement();
// if ( !s.equals( Emp.NotApplicable ) )
t += s + " ";
}
records.addElement( t );
}
printAndModify.writeRecords( records );
}
//** Clear the JTable's rows before a read.
private void clearRows() {
int n = dm.getRowCount();
for ( int i = dm.getRowCount() - 1; i >= 0; i-- )
dm.removeRow( i );
}
//*** instance fields
private Container cont;
private JTable table;
private DefaultTableModel dm;
private PrintAndModify printAndModify;
private String infileName="input.dat";
private String outfileName;
//*** class fields
private static final String []readString ={ " Read File ","读取文件"};;
private static final String []writeString = {" Save File ","保存"};
private static final String []exitString = {" Exit ","退出"};
private int language=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -