代码在附件里,里面有三个java文件,主文件是MainFrame.java;还有两个txt文件是用来测试的问题是第一次执行“Open”,打开1.txt里的把其中的内容(一个50*50矩阵)显示在表格中,若再执行一次 “Open”操作,打开2.txt(100*100矩阵),其中的内容也可以显示,但是一拖动滚动条,又显示成第一次的内容。有兴趣的达人帮我测试修改一下
我搞了好长时间没搞出来
谢谢了啊为什么上传附件总是出错呀
要不有兴趣的达人把邮箱留下我发邮件,真的很急。

解决方案 »

  1.   

    我把代码贴出来
    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);
    }
    }
    }
      

  2.   


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

  3.   


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

  4.   

    ResultDisplayTable rdt=new ResultDisplayTable(this,rowNum,cellData);
    你做一次openfile動作  上面代碼就執行一次    就會new一個新的Jtable  兩次就new了兩個jtable
    你試試改成只有一個jtable   根據數據不同  只改變tablemodel就行了~  
      

  5.   

    用校园网打开好慢我之前也想过这么做,只是因为我初学,不知道具体该怎么做
    horizonlyhw 能教一下我么?
      

  6.   

    我也只是過過嘴癮  呵呵  只能給點建議(俺也初學這個)  你試試   還不一定行~
    把table的定義放在ResultDisplayTable類外面
    或者  把ResultDisplayTable類 寫成  單例類~  構造函數private 只有一個實例化對象
      

  7.   

    仍然没有解决
    我快要疯了,没有思路ing
      

  8.   

    把你代码  给我发一份吧    我试试     [email protected]
      

  9.   

    能把1.txt和2.txt的内容贴出来不?
      

  10.   

    解决了,首先建议MainFrame类的main中在mainFrame.setVisible(true);之前,加上mainFrame.pack();
    然后,ResultDisplayTable类的最后部分
            scrollPane.revalidate();
                    
            mainFrame.validate();
    这两句之间的内容修改成:
            scrollPane.revalidate();
            
            mainFrame.getContentPane().removeAll();
            mainFrame.getContentPane().add(scrollPane);
            
            mainFrame.validate();
    就正常了