为什么我写这个程序无法对JTable中的数据进行有效的排序啊,我点击要进行排序的表头单元格,发现JTable中 的数据的顺序时改变了,但是没有对数据进行排序(升序或者降序),求高手指教import java.io.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;public class MyJTable extends JFrame{
/*
TableModel model = new DefaultTableModel(500, 10);
JTable jt = new JTable(model);
RowSorter sorter = new TableRowSorter(model);
*/
//JTable jt; DefaultTableModel m = new DefaultTableModel(500, 10);
JTable jt = new JTable(m);
final TableRowSorter sorter = new TableRowSorter(m);
//jt.setRowSorter(sorter);
JMenu jfile, jtool; // 菜单栏中的文件
JMenuItem Save, Open, New, Avg, PeopleAvg, Max, Min, Pass, g69, g79, g89, g90; // 文件菜单选项中的保存和打开和新建
FileWriter file;
FileWriter test;
int proNum; public MyJTable() { super("成绩管理系统");
jt.setRowSorter(new TableRowSorter(m));
//jt = new JTable(500, 10);
jt.setPreferredScrollableViewportSize(new Dimension(600, 100));// 设置表格的大小
jt.setRowHeight(30);// 设置每行的高度为20
// jt.setRowHeight(0, 20);// 设置第1行的高度为15
jt.setRowMargin(5);// 设置相邻两行单元格的距离
jt.setRowSelectionAllowed(true);// 设置可否被选择.默认为false
jt.setSelectionBackground(Color.white);// 设置所选择行的背景色
jt.setSelectionForeground(Color.red);// 设置所选择行的前景色
jt.setGridColor(Color.LIGHT_GRAY);// 设置网格线的颜色
//jt.selectAll();// 选择所有行
jt.setRowSelectionInterval(0, 2);// 设置初始的选择行,这里是1到3行都处于选择状态
//jt.clearSelection();// 取消选择
// jt.setDragEnabled(true);// 设置是否可拖到组件
// jt.setShowGrid(false);// 是否显示网格线
jt.setShowHorizontalLines(true);// 是否显示水平的网格线
jt.setShowVerticalLines(true);// 是否显示垂直的网格线
// jt.setValueAt("tt", 0, 0);// 设置某个单元格的值,这个值是一个对象
jt.doLayout();
jt.setBackground(Color.white); JScrollPane jsp = new JScrollPane(jt);
JPanel panel = new JPanel(new GridLayout(0, 1));
panel.setPreferredSize(new Dimension(600, 400));
panel.setBackground(Color.black); panel.add(jsp); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(panel); this.pack();
this.setVisible(true);
this.validate(); jfile = new JMenu("文件");
jtool = new JMenu("工具"); New = new JMenuItem("新建");
Save = new JMenuItem("保存");
Open = new JMenuItem("打开");
JMenuBar bar = new JMenuBar();
bar.add(jfile);
bar.add(jtool); jfile.add(New);
jfile.add(Save);
jfile.add(Open); panel.add(bar);
this.setJMenuBar(bar);//新建一个成绩表
New.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
//将所有的表格单元中的数据清空,以便重新录入
int i = 0, j = 0;
while (j < 500) {
for (; i < 10; i++) {
jt.setValueAt(null, j, i);
}
j++;
i = 0;
}
}
}); //保存录入的成绩表
Save.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int n = fileChooser.showSaveDialog(MyJTable.this); if (n == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
FileWriter tofile = new FileWriter(file);
BufferedWriter out = new BufferedWriter(tofile); for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if ((String) jt.getValueAt(i, j) == null) {
out.write("" + "\r\n");
proNum = i - 1;
break; // 如果单元格为空,则跳出本层循环
} else {
out.write((String) jt.getValueAt(i, j)
+ "\t"); // 否则将其添加到文件中
}
}
} out.flush();
out.close();
} catch (IOException ee) {
}
}
}
});
//打开已录入的成绩表
Open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser Chooser = new JFileChooser();
int n = Chooser.showOpenDialog(null); if (n == JFileChooser.APPROVE_OPTION) { File file = Chooser.getSelectedFile(); try {
FileReader readfile = new FileReader(file);
BufferedReader in = new BufferedReader(readfile); String s = null;
String[] str; int i = 0, j = 0;
while ((s = in.readLine()) != null) { str = s.split("\t");
for (; i < str.length; i++) {
//System.out.print(str[i] + " ");
jt.setValueAt(str[i], j, i);
} j++;
i = 0; //将i重置为0 }
} catch (IOException ee) {
}
}
}
}); } public static void main(String[] ars) throws ClassNotFoundException,
InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
//加载windows系统的皮肤
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
new MyJTable(); }
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;public class MyJTable extends JFrame{
/*
TableModel model = new DefaultTableModel(500, 10);
JTable jt = new JTable(model);
RowSorter sorter = new TableRowSorter(model);
*/
//JTable jt; DefaultTableModel m = new DefaultTableModel(500, 10);
JTable jt = new JTable(m);
final TableRowSorter sorter = new TableRowSorter(m);
//jt.setRowSorter(sorter);
JMenu jfile, jtool; // 菜单栏中的文件
JMenuItem Save, Open, New, Avg, PeopleAvg, Max, Min, Pass, g69, g79, g89, g90; // 文件菜单选项中的保存和打开和新建
FileWriter file;
FileWriter test;
int proNum; public MyJTable() { super("成绩管理系统");
jt.setRowSorter(new TableRowSorter(m));
//jt = new JTable(500, 10);
jt.setPreferredScrollableViewportSize(new Dimension(600, 100));// 设置表格的大小
jt.setRowHeight(30);// 设置每行的高度为20
// jt.setRowHeight(0, 20);// 设置第1行的高度为15
jt.setRowMargin(5);// 设置相邻两行单元格的距离
jt.setRowSelectionAllowed(true);// 设置可否被选择.默认为false
jt.setSelectionBackground(Color.white);// 设置所选择行的背景色
jt.setSelectionForeground(Color.red);// 设置所选择行的前景色
jt.setGridColor(Color.LIGHT_GRAY);// 设置网格线的颜色
//jt.selectAll();// 选择所有行
jt.setRowSelectionInterval(0, 2);// 设置初始的选择行,这里是1到3行都处于选择状态
//jt.clearSelection();// 取消选择
// jt.setDragEnabled(true);// 设置是否可拖到组件
// jt.setShowGrid(false);// 是否显示网格线
jt.setShowHorizontalLines(true);// 是否显示水平的网格线
jt.setShowVerticalLines(true);// 是否显示垂直的网格线
// jt.setValueAt("tt", 0, 0);// 设置某个单元格的值,这个值是一个对象
jt.doLayout();
jt.setBackground(Color.white); JScrollPane jsp = new JScrollPane(jt);
JPanel panel = new JPanel(new GridLayout(0, 1));
panel.setPreferredSize(new Dimension(600, 400));
panel.setBackground(Color.black); panel.add(jsp); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(panel); this.pack();
this.setVisible(true);
this.validate(); jfile = new JMenu("文件");
jtool = new JMenu("工具"); New = new JMenuItem("新建");
Save = new JMenuItem("保存");
Open = new JMenuItem("打开");
JMenuBar bar = new JMenuBar();
bar.add(jfile);
bar.add(jtool); jfile.add(New);
jfile.add(Save);
jfile.add(Open); panel.add(bar);
this.setJMenuBar(bar);//新建一个成绩表
New.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
//将所有的表格单元中的数据清空,以便重新录入
int i = 0, j = 0;
while (j < 500) {
for (; i < 10; i++) {
jt.setValueAt(null, j, i);
}
j++;
i = 0;
}
}
}); //保存录入的成绩表
Save.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int n = fileChooser.showSaveDialog(MyJTable.this); if (n == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
FileWriter tofile = new FileWriter(file);
BufferedWriter out = new BufferedWriter(tofile); for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if ((String) jt.getValueAt(i, j) == null) {
out.write("" + "\r\n");
proNum = i - 1;
break; // 如果单元格为空,则跳出本层循环
} else {
out.write((String) jt.getValueAt(i, j)
+ "\t"); // 否则将其添加到文件中
}
}
} out.flush();
out.close();
} catch (IOException ee) {
}
}
}
});
//打开已录入的成绩表
Open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser Chooser = new JFileChooser();
int n = Chooser.showOpenDialog(null); if (n == JFileChooser.APPROVE_OPTION) { File file = Chooser.getSelectedFile(); try {
FileReader readfile = new FileReader(file);
BufferedReader in = new BufferedReader(readfile); String s = null;
String[] str; int i = 0, j = 0;
while ((s = in.readLine()) != null) { str = s.split("\t");
for (; i < str.length; i++) {
//System.out.print(str[i] + " ");
jt.setValueAt(str[i], j, i);
} j++;
i = 0; //将i重置为0 }
} catch (IOException ee) {
}
}
}
}); } public static void main(String[] ars) throws ClassNotFoundException,
InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
//加载windows系统的皮肤
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
new MyJTable(); }
}
搞的我都不好意思搞了哎,,,
model.setRowCount(counter);// 设置行数 jTable.setModel(model);
jTable.setAutoCreateRowSorter(true);//为JTable设置排序器