问个关于 table 的 renderer,editor的问题
 
需要实现 JTreeTable 这样的组件,我们实现了这个组件,(就是sun网站上那个,具体就是http://java.sun.com/products/jfc/tsc/articles/treetable2/index.html)。但是,一个功能,不知道如何实现。
 
问题即:
当我们缩小表格中 放tree的这个列时,树的内容 被掩盖了,这时,我想出现滚动条,就如 NetBeans 中实现的那样。就是说,放tree的这整个列,如果需要的话,就出现 滚动条我认为,这种滚动条是针对表的某个列产生的,而不是针对这个列 的renderer,或editor 所产生的,那么要如何实现呢。给些提示
 图位于 NetBeans IDE 6.0 M10 中(Tools-->Options-->弹出的对话框的Advanced Options)
 
谢谢大家:)

解决方案 »

  1.   

    放Tree的列?
    你是说在Table的一列中,放入的数据是tree的节点?
    如果是那样的话最简便的方法就是做两个table,一个table只装tree节点的那一列,另一个庄表格的其他数据,是要解决这个问题吗?
      

  2.   

    是的  table的一个列中,放的就是一颗树。树的每个节点。都相当于table中的一个cell是的  用两个表可以实现。不过需要做的像一个table一样。包括可以  对有tree的这个列 拖拉
      

  3.   

    代码示例:应该是你要的效果
    package test;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;/**
     * @version 1.0 12/05/98
     */public class FixedColumnExample extends JFrame {
    Object[][] data; Object[] column; JTable fixedTable, table; public FixedColumnExample() {
    super("Fixed Column Example");
    setSize(400, 150); data = new Object[][] { { "1", "11", "A", "", "", "", "", "" },
    { "2", "22", "", "B", "", "", "", "" },
    { "3", "33", "", "", "C", "", "", "" },
    { "4", "44", "", "", "", "D", "", "" },
    { "5", "55", "", "", "", "", "E", "" },
    { "6", "66", "", "", "", "", "", "F" } };
    column = new Object[] { "fixed 1", "fixed 2", "a", "b", "c", "d", "e",
    "f" }; AbstractTableModel fixedModel = new AbstractTableModel() {
    public int getColumnCount() {
    return 2;
    } public int getRowCount() {
    return data.length;
    } public String getColumnName(int col) {
    return (String) column[col];
    } public Object getValueAt(int row, int col) {
    return data[row][col];
    }
    };
    AbstractTableModel model = new AbstractTableModel() {
    public int getColumnCount() {
    return column.length - 2;
    } public int getRowCount() {
    return data.length;
    } public String getColumnName(int col) {
    return (String) column[col + 2];
    } public Object getValueAt(int row, int col) {
    return data[row][col + 2];
    } public void setValueAt(Object obj, int row, int col) {
    data[row][col + 2] = obj;
    } public boolean CellEditable(int row, int col) {
    return true;
    }
    }; fixedTable = new JTable(fixedModel) {
    public void valueChanged(ListSelectionEvent e) {
    super.valueChanged(e);
    checkSelection(true);
    }
    };
    table = new JTable(model) {
    public void valueChanged(ListSelectionEvent e) {
    super.valueChanged(e);
    checkSelection(false);
    }
    };
    fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scroll = new JScrollPane(table);
    JViewport viewport = new JViewport();
    viewport.setView(fixedTable);
    viewport.setPreferredSize(fixedTable.getPreferredSize());
    scroll.setRowHeaderView(viewport);
    scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable
    .getTableHeader()); getContentPane().add(scroll, BorderLayout.CENTER);
    } private void checkSelection(boolean isFixedTable) {
    int fixedSelectedIndex = fixedTable.getSelectedRow();
    int selectedIndex = table.getSelectedRow();
    if (fixedSelectedIndex != selectedIndex) {
    if (isFixedTable) {
    table.setRowSelectionInterval(fixedSelectedIndex,
    fixedSelectedIndex);
    } else {
    fixedTable
    .setRowSelectionInterval(selectedIndex, selectedIndex);
    }
    }
    } public static void main(String[] args) {
    FixedColumnExample frame = new FixedColumnExample();
    frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    frame.setVisible(true);
    }
    }
      

  4.   

    呵呵,明白你的意思了,我觉得要想实现你要得功能,就要做多个table,两个或者更多,把它们放在不同的panel里,把各个table添加到一个组里,给装树结点的那个table添加监听,当树的节点点击时,其他table相应事件,重新setModel,来同步整体
    这个功能要实现的话,代码量...
    我只能想到这么多,再多我也想不到了
    或许还有更简单的方式,等待高人吧
      

  5.   

    http://blog.elevenworks.com/
    这里有你需要的例子:Screenshot of TreeTable and Toolbar
      

  6.   


    //Send questions, comments, bug reports, etc. to the authors://Rob Warner ([email protected])
    //Robert Harris ([email protected])import org.eclipse.swt.SWT;
    import org.eclipse.swt.custom.*;
    import org.eclipse.swt.layout.*;
    import org.eclipse.swt.widgets.*;/**
     * This class demonstrates TableTree
     */
    public class TableTreeTest {
      // The number of rows and columns
      private static final int NUM = 3;  /**
       * Runs the application
       */
      public void run() {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("TableTree Test");
        createContents(shell);
        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
          if (!display.readAndDispatch()) {
            display.sleep();
          }
        }
        display.dispose();
      }  /**
       * Creates the main window's contents
       * 
       * @param shell the main window
       */
      private void createContents(final Shell shell) {
        shell.setLayout(new FillLayout());    // Create the TableTree and set some attributes on the underlying table
        TableTree tableTree = new TableTree(shell, SWT.NONE);
        Table table = tableTree.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(false);    // Create the columns, passing the underlying table
        for (int i = 0; i < NUM; i++) {
          new TableColumn(table, SWT.LEFT).setText("Column " + (i + 1));
        }    // Create the data
        for (int i = 0; i < NUM; i++) {
          // Create a parent item and add data to the columns
          TableTreeItem parent = new TableTreeItem(tableTree, SWT.NONE);
          parent.setText(0, "Parent " + (i + 1));
          parent.setText(1, "Data");
          parent.setText(2, "More data");      // Add children items
          for (int j = 0; j < NUM; j++) {
            // Create a child item and add data to the columns
            TableTreeItem child = new TableTreeItem(parent, SWT.NONE);
            child.setText(0, "Child " + (j + 1));
            child.setText(1, "Some child data");
            child.setText(2, "More child data");
          }
          // Expand the parent item
          parent.setExpanded(true);
        }    // Pack the columns
        TableColumn[] columns = table.getColumns();
        for (int i = 0, n = columns.length; i < n; i++) {
          columns[i].pack();
        }
      }  /**
       * The application entry point
       * 
       * @param args the command line arguments
       */
      public static void main(String[] args) {
        new TableTreeTest().run();
      }
    }  
     
     
    希望这段代码对你有帮助
      

  7.   

    private void createContents(final Shell shell) {Shell  swt的吧?