急!!!关于改变JTable显示的问题,好久没搞出来,达人帮我看下

CTea321 2008-10-14 11:50:16
代码在附件里,里面有三个java文件,主文件是MainFrame.java;还有两个txt文件是用来测试的

问题是第一次执行“Open”,打开1.txt里的把其中的内容(一个50*50矩阵)显示在表格中,若再执行一次 “Open”操作,打开2.txt(100*100矩阵),其中的内容也可以显示,但是一拖动滚动条,又显示成第一次的内容。

有兴趣的达人帮我测试修改一下
我搞了好长时间没搞出来
谢谢了啊

为什么上传附件总是出错呀
要不有兴趣的达人把邮箱留下我发邮件,真的很急。
...全文
176 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cowputer 2008-10-16
  • 打赏
  • 举报
回复
解决了,首先建议MainFrame类的main中在mainFrame.setVisible(true);之前,加上mainFrame.pack();
然后,ResultDisplayTable类的最后部分
scrollPane.revalidate();

mainFrame.validate();
这两句之间的内容修改成:
scrollPane.revalidate();

mainFrame.getContentPane().removeAll();
mainFrame.getContentPane().add(scrollPane);

mainFrame.validate();
就正常了
cowputer 2008-10-16
  • 打赏
  • 举报
回复
能把1.txt和2.txt的内容贴出来不?
CTea321 2008-10-15
  • 打赏
  • 举报
回复

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();
}

}
CTea321 2008-10-15
  • 打赏
  • 举报
回复

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;
}
}
CTea321 2008-10-15
  • 打赏
  • 举报
回复
我把代码贴出来


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);
}
}
}
CTea321 2008-10-15
  • 打赏
  • 举报
回复
OK,我试试
horizonlyhw 2008-10-15
  • 打赏
  • 举报
回复
我也只是過過嘴癮 呵呵 只能給點建議(俺也初學這個) 你試試 還不一定行~
把table的定義放在ResultDisplayTable類外面
或者 把ResultDisplayTable類 寫成 單例類~ 構造函數private 只有一個實例化對象
CTea321 2008-10-15
  • 打赏
  • 举报
回复
用校园网打开好慢

我之前也想过这么做,只是因为我初学,不知道具体该怎么做
horizonlyhw 能教一下我么?
horizonlyhw 2008-10-15
  • 打赏
  • 举报
回复
把你代码 给我发一份吧 我试试 horizonlyhw@163.com
CTea321 2008-10-15
  • 打赏
  • 举报
回复
仍然没有解决
我快要疯了,没有思路ing
horizonlyhw 2008-10-15
  • 打赏
  • 举报
回复
ResultDisplayTable rdt=new ResultDisplayTable(this,rowNum,cellData);
你做一次openfile動作 上面代碼就執行一次 就會new一個新的Jtable 兩次就new了兩個jtable
你試試改成只有一個jtable 根據數據不同 只改變tablemodel就行了~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧