代码在附件里,里面有三个java文件,主文件是MainFrame.java;还有两个txt文件是用来测试的问题是第一次执行“Open”,打开1.txt里的把其中的内容(一个50*50矩阵)显示在表格中,若再执行一次 “Open”操作,打开2.txt(100*100矩阵),其中的内容也可以显示,但是一拖动滚动条,又显示成第一次的内容。有兴趣的达人帮我测试修改一下
我搞了好长时间没搞出来
谢谢了啊为什么上传附件总是出错呀
要不有兴趣的达人把邮箱留下我发邮件,真的很急。
我搞了好长时间没搞出来
谢谢了啊为什么上传附件总是出错呀
要不有兴趣的达人把邮箱留下我发邮件,真的很急。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.IOException;
import java.io.File;public class MainFrame extends JFrame
{
public static void main(String args[])
{
MainFrame mainFrame = new MainFrame();
mainFrame.setVisible(true);
mainFrame.setResizable(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public MainFrame()
{
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
setTitle("Log Parse Tool");
setBounds(0,0,screenSize.width,24*screenSize.height/25);
JMenu fileMenu=new JMenu("File");
JMenuItem openItem=new JMenuItem("Open");
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openFile(e);
}
});
JMenuItem saveAsItem=new JMenuItem("Save");
saveAsItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
saveAsItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// saveFile(e);
}
});
JMenuItem exitItem=new JMenuItem("Exit");
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,InputEvent.ALT_MASK));
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
exitFrame(e);
}
});
fileMenu.addSeparator();
fileMenu.add(openItem);
fileMenu.addSeparator();
fileMenu.addSeparator();
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
fileMenu.addSeparator();
fileMenu.add(exitItem);
fileMenu.addSeparator();
JMenuBar menuBar=new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(fileMenu);
} void openFile(ActionEvent e)
{
JFileChooser chooser = new JFileChooser(".");
FileFilter type = new ExtensionFilter("Text File", new String[] { ".txt", ".doc" });
chooser.addChoosableFileFilter(type);
chooser.setAcceptAllFileFilterUsed(true);
chooser.setFileFilter(type);
int status = chooser.showOpenDialog(MainFrame.this);
File f_1;
String fileName="";
if (status == JFileChooser.APPROVE_OPTION)
{
f_1 = chooser.getSelectedFile();
fileName=f_1.getAbsolutePath();
}
try
{
ProcessFile pf=new ProcessFile(fileName);
int rowNum=pf.getRowNum();
int[][] cellData = new int[rowNum][rowNum+1];
System.arraycopy(pf.getCellData(),0, cellData,0,pf.getCellData().length);
ResultDisplayTable rdt=new ResultDisplayTable(this,rowNum,cellData);
}catch(IOException ee) {
ee.printStackTrace();
}
}
void exitFrame(ActionEvent e)
{
System.exit(0);
}
public class ExtensionFilter extends FileFilter
{
private String extensions[];
private String description;
public ExtensionFilter(String description, String extension)
{
this(description, new String[] { extension });
}
public ExtensionFilter(String description, String extensions[])
{
this.description = description;
this.extensions = (String[]) extensions.clone();
}
public boolean accept(File file)
{
if (file.isDirectory())
{
return true;
}
int count = extensions.length;
String path = file.getAbsolutePath();
for (int k = 0; k < count; k++)
{
String ext = extensions[k];
if (path.endsWith(ext) && (path.charAt(path.length() - ext.length()) == '.'))
{
return true;
}
}
return false;
}
public String getDescription()
{
return (description == null ? extensions[0] : description);
}
}
}
import java.io.*;
import java.util.*;public class ProcessFile
{
private String fileName;
public int count;
public int[][] cellData;
public ProcessFile(String fileName) throws IOException
{
this.fileName=fileName;
this.process();
}
public void process() throws IOException
{
try
{
File f=new File(this.fileName);
FileReader fr=new FileReader(f);
long fileLength=f.length();
LineNumberReader lnr=new LineNumberReader(fr);
if(lnr != null)
{
lnr.skip(fileLength);
}
count=lnr.getLineNumber()+1;
String line;
int p=0;
int k;
cellData = new int[count][count+1];
FileReader fr_1=new FileReader(f);
BufferedReader br = new BufferedReader(fr_1);
while((line = br.readLine())!=null && p<count)
{
String[] str = line.split(" ");
for(k=1;k<=str.length;k++)
{
cellData[p][k]=Integer.parseInt(str[k-1]);
}
p++;
}
br.close();
}catch (IOException e) {
e.printStackTrace();
}
}
public int getRowNum()
{
return count;
} public int[][] getCellData()
{
return cellData;
}
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.*;import javax.swing.*;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;
import javax.swing.table.*;public class ResultDisplayTable
{
protected MainFrame mainFrame;
private int rowNum;
private int i,j;
private int colNum=0;
private int[][] cellData;
private String[] columnNames;
public ResultDisplayTable(MainFrame mainFrame,int rowNum,int[][] cellData)
{
this.mainFrame=mainFrame;
this.rowNum=rowNum;
// this.colNum=this.rowNum+1;
this.colNum = cellData[0].length;
this.cellData = new int[this.rowNum][this.colNum];
this.columnNames = new String[this.colNum];
this.cellData = cellData;
this.Table();
}
JTable mainTable;
JTable fixedTable;
JScrollPane scrollPane;
private void Table()
{
for(i=0;i<this.rowNum;i++)
{
this.cellData[i][0]=i+1;
}
this.columnNames[0]="#";
for (j = 1; j < this.columnNames.length; j++)
{
this.columnNames[j] = String.valueOf(j);
}
TableModel fixedColumnModel = new DefaultTableModel()
{
public int getColumnCount()
{
return 1;
}
public String getColumnName(int column)
{
return columnNames[column];
}
public int getRowCount()
{
return cellData.length;
}
public Object getValueAt(int row, int column)
{
return cellData[row][column];
}
};
TableModel mainModel = new DefaultTableModel()
{
public int getColumnCount()
{
return columnNames.length - 1;
}
public String getColumnName(int column)
{
return columnNames[column + 1];
}
public int getRowCount()
{
return cellData.length;
}
public Object getValueAt(int row, int column)
{
return cellData[row][column + 1];
}
}; fixedTable = new JTable(fixedColumnModel);
fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
fixedTable.setRowHeight(30);
fixedTable.getColumnModel().getColumn(0).setPreferredWidth(30);
DefaultTableCellRenderer dtc=new DefaultTableCellRenderer();
dtc.setBackground(new Color(207,245,254));
fixedTable.getColumnModel().getColumn(0).setCellRenderer(dtc);
mainTable = new JTable(mainModel);
mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
ListSelectionModel model = fixedTable.getSelectionModel();
mainTable.setSelectionModel(model);
mainTable.getTableHeader().setPreferredSize(new Dimension(40, 30));
mainTable.getTableHeader().setFont(new Font("Arial",Font.PLAIN,12));
mainTable.getTableHeader().setBackground(new Color(207,245,254)); mainTable.setRowHeight(30);
for(j = 0; j < this.columnNames.length-1; j++)
{
mainTable.getColumnModel().getColumn(j).setPreferredWidth(40);
}
// for(i=0;i<this.rowNum;i++)
// {
// fixedTable. getCellEditor(i,0).getTableCellEditorComponent(fixedTable,i+1,false,i,0).setFont(new Font("Arial",Font.PLAIN,12));
// }
scrollPane = new JScrollPane(mainTable);
Dimension fixedSize = fixedTable.getPreferredSize();
mainTable.repaint();
mainTable.updateUI();
JViewport viewport = new JViewport();
viewport.setView(fixedTable);
viewport.setPreferredSize(fixedSize);
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable.getTableHeader());
scrollPane.setRowHeaderView(viewport);
scrollPane.revalidate();
mainFrame.add(scrollPane);
mainFrame.validate();
}}
你做一次openfile動作 上面代碼就執行一次 就會new一個新的Jtable 兩次就new了兩個jtable
你試試改成只有一個jtable 根據數據不同 只改變tablemodel就行了~
horizonlyhw 能教一下我么?
把table的定義放在ResultDisplayTable類外面
或者 把ResultDisplayTable類 寫成 單例類~ 構造函數private 只有一個實例化對象
我快要疯了,没有思路ing
然后,ResultDisplayTable类的最后部分
scrollPane.revalidate();
mainFrame.validate();
这两句之间的内容修改成:
scrollPane.revalidate();
mainFrame.getContentPane().removeAll();
mainFrame.getContentPane().add(scrollPane);
mainFrame.validate();
就正常了