blob: 59e36c342410602518a5a0d1bbb6824c5153700d [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= DevFaqViewSaveTTVColumns
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki DevFaqViewSaveTTVColumns
:description: Apache NetBeans wiki DevFaqViewSaveTTVColumns
:toc: left
:toc-title:
:syntax: true
=== Saving Column Attributes of a TreeTableView
Assuming you are embedding a `TreeTableView` (TTV) inside a `TopComponent`, you can override the `readExternal(ObjectInput)` and `writeExternal(ObjectOutput)` methods for preserving the attributes of the columns in your TTV (e.g. the column ordering, sorted-ness, sorting order, visibility, and width).
Start by keeping a reference to the `Node.Property` array used to define the columns of the TTV, since there is no way to get those properties from the TTV (i.e. there is no `getProperties()` method). The examples below will refer to this `Node.Property` array as "columns".
In order to get and set the column widths of the tree-table, we need to subclass `TreeTableView` and provide a `getTable()` method that returns the `treeTable` protected field of the `TreeTableView` class. In the examples below, this reference will be referred to as `treeTable` for brevity.
First let us save the column attributes to the serialized `TopComponent` via the `writeExternal()` method.
[source,java]
----
public void writeExternal(ObjectOutput out) throws IOException {
super.writeExternal(out);
out.writeInt(columns.length);
for (int ii = 0; ii < columns.length; ii++) {
Boolean b = (Boolean) columns[Ii].getValue("InvisibleInTreeTableView");
if (b == null) {
b = Boolean.FALSE;
}
out.writeBoolean(b.booleanValue());
Integer i = (Integer) columns[Ii].getValue("OrderNumberTTV");
if (i == null) {
i = new Integer(ii);
}
out.writeInt(i.intValue());
b = (Boolean) columns[Ii].getValue("SortingColumnTTV");
if (b == null) {
b = Boolean.FALSE;
}
out.writeBoolean(b.booleanValue());
b = (Boolean) columns[Ii].getValue("DescendingOrderTTV");
if (b == null) {
b = Boolean.FALSE;
}
out.writeBoolean(b.booleanValue());
}
try {
TableColumnModel tcm = treeTable.getColumnModel();
int count = tcm.getColumnCount();
for (int index = 0; index < count; index++) {
TableColumn tc = tcm.getColumn(index);
out.writeInt(tc.getWidth());
}
} catch (IOException ioe) {
ErrorManager.getDefault().notify(ErrorManager.WARNING, ioe);
}
}
----
Next, we see how to deserialize the column attributes.
[source,java]
----
public void readExternal(ObjectInput in)
throws IOException, ClassNotFoundException {
super.readExternal(in);
try {
int count = in.readInt();
for (int ii = 0; ii < count; ii++) {
boolean b = in.readBoolean();
columns[Ii].setValue("InvisibleInTreeTableView", Boolean.valueOf(b));
int i = in.readInt();
columns[Ii].setValue("OrderNumberTTV", Integer.valueOf(i));
b = in.readBoolean();
columns[Ii].setValue("SortingColumnTTV", Boolean.valueOf(b));
b = in.readBoolean();
columns[Ii].setValue("DescendingOrderTTV", Boolean.valueOf(b));
}
} catch (Exception e) {
// Could be reading an old instance which is missing data.
// In any case, ignore this as there is no use in reporting it.
}
nodeView.setProperties(columns);
// Read the column widths from the stream immediately and save them
// to a final array for the Runnable below to access them.
TableColumnModel tcm = treeTable.getColumnModel();
int count = tcm.getColumnCount();
final int[[ | ]] widths = new int[Count];
try {
for (int index = 0; index < count; index++) {
widths[Index] = in.readInt();
}
} catch (IOException ioe) {
// Could be reading an old instance which is missing data.
// In any case, ignore this as there is no use in reporting it
// (and return immediately so as not to invoke the runnable).
return;
}
// Changing Swing widgets must be done on the AWT event thread.
EventQueue.invokeLater(new Runnable() {
public void run() {
// TreeTableView prohibits moving the tree
// column, so it is always offset zero.
setTreePreferredWidth(widths[0]);
for (int index = 1; index < widths.length; index++) {
setTableColumnPreferredWidth(index - 1, widths[Index]);
}
}
});
}
----
=== Apache Migration Information
The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.
This page was exported from link:http://wiki.netbeans.org/DevFaqViewSaveTTVColumns[http://wiki.netbeans.org/DevFaqViewSaveTTVColumns] ,
that was last modified by NetBeans user Jtulach
on 2010-07-24T19:14:04Z.
*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.