对JTable中的某项进行编辑时(比如原来的内容是“aaa”),出现一个文本编辑框,然后添加若干字符(如“bbb”),此时在编辑并没有结束的情况下,如果你改变了JTable所在窗口的宽度,从而导致了正在编辑的cell所在的列的宽度发生变化,则你正在编辑的内容将会丢失,并且编辑框消失。
有没有办法实现:当正在编辑的列的宽度发生变化时,编辑框也能够随之改变宽度,从而保持编辑状态?

解决方案 »

  1.   

    可以把JTable写成能够横向拉动的方式就可以了
      

  2.   

    如何能够将JTable设置为横向拉动?SWING中有相应的API吗?
      

  3.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.sql.*;
    import java.util.Vector;public class RowHeaderTable extends JFrame
    {
    public RowHeaderTable()
    {
    super("Demo");
    this.setSize(300,200);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);


    TableModel tm = new AbstractTableModel()
    {

    String data[] = {"","a","b","c","d","e"};
    String headers[] =  {"Row #","Column 1","Column 2","Column 3","Column 4","Column 5"};

    public int getColumnCount(){return data.length;}
    public int getRowCount(){return 1000;}
    public String getColumnName(int col){return headers[col];}

    public Object getValueAt(int row,int col)
    {
    return data[col]+row;
    }

    };

    TableColumnModel cm = new DefaultTableColumnModel()
    {
    boolean first = true;
    public void addColumn(TableColumn tc)
    {
    if(first){first = false;return;}
    tc.setMinWidth(50);
    super.addColumn(tc);
    }
    };

    TableColumnModel rowHeaderModel = new DefaultTableColumnModel()
    {
    boolean first = true;
    public void addColumn(TableColumn tc)
    {
    if(first)
    {
    tc.setMaxWidth(tc.getPreferredWidth());
    super.addColumn(tc);
    first = false;
    }
    }
    };
    JTable jt = new JTable(tm,cm);
    JTable headerColumn = new JTable(tm,rowHeaderModel);
    jt.createDefaultColumnsFromModel();
    headerColumn.createDefaultColumnsFromModel();

    jt.setSelectionModel(headerColumn.getSelectionModel());

    headerColumn.setBackground(Color.lightGray);
    headerColumn.setColumnSelectionAllowed(false);
    headerColumn.setCellSelectionEnabled(false);

    JViewport jv = new JViewport();
    jv.setView(headerColumn);
    jv.setPreferredSize(headerColumn.getMaximumSize());

    jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    JScrollPane jsp = new JScrollPane(jt);
    jsp.setRowHeader(jv);
    jsp.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER,headerColumn.getTableHeader());
    getContentPane().add(jsp,BorderLayout.CENTER);

    }
    public static void main(String args[])
    {
    RowHeaderTable rht = new RowHeaderTable();
    rht.setVisible(true);
    }
    }把行和列设置大小就能横向拖动了你可以看看代码