问个关于 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)
谢谢大家:)
需要实现 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)
谢谢大家:)
解决方案 »
- 求助!字符串匹配问题!
- 返回JComboBox的选择那一项
- 问一个关于反射中,属性字段的问题。
- 请问uitl类中properties的set/getProperity与System.get/setProperty有什么区别啊???
- I/O类这么多,晕了~~~望高手指点!
- List组件中哪个listener监听列表项下标变化的事件
- this 代表什么?
- 小问题,各位看过来!谢谢!
- 在JAVA中怎么在JLIST中增加元素?(不是在JLIST生成时增加,而是随时动态增加)
- Eclipse问题。。怎么设置啊
- java 中 byte[]-->String-->byte[] 怎么转?
- POI, 操作[.xls]文件, 怎么在指定位置,插入一个新行
你是说在Table的一列中,放入的数据是tree的节点?
如果是那样的话最简便的方法就是做两个table,一个table只装tree节点的那一列,另一个庄表格的其他数据,是要解决这个问题吗?
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);
}
}
这个功能要实现的话,代码量...
我只能想到这么多,再多我也想不到了
或许还有更简单的方式,等待高人吧
这里有你需要的例子:Screenshot of TreeTable and Toolbar
//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();
}
}
希望这段代码对你有帮助