在这个问题中,我问如何使JXTreeTable(SwingX)排序成为它的首要元素.
我接过一看库(aephyr)所建议mKorbel,并试图将其与JXTreeTable结合(我创建了一个名为JXSortableTreeTable类新复制JXTreeTable的源代码).
到目前为止,我能够实现一种机制来对树表的节点进行排序,即当convertRowIndexToModel调用我的自定义排序器(见下文)时,它返回的索引是正确的.
因此,我有一个看起来像这样的类:
public class TreeTableRowSorter <M extends TreeTableModelAdapter> extends DefaultRowSorter {
private M treeTableModel; // model
private List<Integer> indices; // list where each entry is the model index
private IdentityHashMap<Object, NodeSorter> sorters;
private class IndicesMapFiller { // class that fills the "map" this.indices
public void fillIndicesMap(Object node) { // recursive
// Fills the indices "map"
}
}
@Override
public int convertRowIndexToModel(int index) {
return indices.get(index);
}
@Override
public int convertRowIndexToView(int …Run Code Online (Sandbox Code Playgroud) 我知道(我已查看过这些来源;))已禁用JXTreeTable上的排序.
但是,我想仅允许根据根节点的直接子节点的值对所有列进行排序.
说我有这样的结构:
Name / Date / File UID
(Root)
|- Mr. X / 1996/10/22 / AE123F6D
|--- File1 / 2012/01/10 / DFC2345Q
|--- File2 / 2012/01/11 / D321FEC6
|- Mrs. Y / 1975/03/03 / G2GF35EZ
|--- File3 / 2012/02/29 / 35GERR32
|--- File4 / 2012/01/22 / LKJY2342
.
.
.Run Code Online (Sandbox Code Playgroud)
我想要实现的是仅在第一级节点上对3列进行排序.假设我想按升序日期对其进行排序,它最终会像这样:
Name / Date / File UID
(Root)
|- Mrs. Y / 1975/03/03 / G2GF35EZ
|--- File3 / 2012/02/29 / 35GERR32
|--- File4 / 2012/01/22 / LKJY2342
|- Mr. …Run Code Online (Sandbox Code Playgroud) 我在这一点上有点迷失:我尝试创建一个JTable,它能够在第一列中保存某种树(JTree?)数据结构,然后是基于其他列中的树节点的数据,如下所示图片:

该图像显示了我的JTree的结构.红线表示我需要实现的表结构.树中的每个节点应该像该表中的单行一样进行treatet等等.我希望我能够清楚地了解到我想要实现的目标.
我试过像这里讨论的那样:JTable作为一个JTree节点,这里把JTable放在JTree中,但这不符合我的需要.我还从SwingX项目中了解了JXTreeTable,但似乎很难找到任何有用的例子.此类解决方案的许多链接似乎导致(不再存在)sun网站和/或重定向到oracle网站......
如果有人可以引导我走向正确的方向和/或提供一些如何做到这一点的正常代码(右),这将是非常棒的.
任何帮助,将不胜感激 ;).
我需要突出显示JTable中的每一行.使用旧版本的swingx,可以这样做:
table.setHighlighters(new HighlighterPipeline(new Highlighter[] { new AlternateRowHighlighter(
color1, color2,color3 }));
Run Code Online (Sandbox Code Playgroud)
但现在,使用swingx 1.6,方法setHighlighters()无法接受这些参数.它说"JXTable类型中的方法setHighlighters(Highlighter ...)不适用于参数(HighlighterPipeline)"
那么我怎么能用新的swingx呢?
我想在a中使用a JComboBox作为单元格编辑器JXTreeTable.它与标准工作正常DefaultCellEditor(即点击计数开始等于2).
现在我希望只需单击一下就可以编辑该列.所以我cellEditor.setClickCountToStart(1);在我的代码中添加了一个声明.
这是我的SSCCE:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import org.jdesktop.swingx.JXTreeTable;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
public class TestCellEditorForJXTreeTable {
/** The JXTreeTable */
JXTreeTable treeTable;
/** The model */
DefaultTreeTableModel treeTableModel;
/** Constructor */
public TestCellEditorForJXTreeTable() {
treeTable = new JXTreeTable();
treeTableModel = new DefaultTreeTableModel() {
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "A";
case 1:
return …Run Code Online (Sandbox Code Playgroud) 我正在构建一个treetable使用JXTreeTabble,我想menu根据所选值禁用/能够项目.所以,我试着把这个代码放在我的table model:
public Object getValueAt(int index) {
if (index >= 0 && index < root.getSize()){
return root.get(index);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
问题
以上仅适用于table未扩展内容的情况.由于index的selected row可能是比较大size的T的able model(模型可以有两个项目和行可以有10当一切都展开).此外,它object type的parent不同之处children(想象一本带有章节的书,因为它的孩子).
你有什么建议正确地做到这一点?
我正在使用Eclipse,我有一个关于JXTreeTables的问题.我想要一个窗口,显示有关节点的一些信息,在双击节点时弹出.现在,是否有可能获得JXTreeTable的双击节点或null如果单击不是直接在节点上?
我把这个CustomCellRenderer类打算用于JXTreeTable和JXTable对象,因为我的项目中有很多这些.所以这个类实现TreeCellRenderer和TableCellRenderer接口:
public class CustomCellRenderer extends JLabel
implements TreeCellRenderer, TableCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
setBackground(selected ? new Color(83,142,213) : Color.white);
setForeground(selected ? Color.white : Color.black);
//here is the icon setting code but it's irrelevant to my problem
setText(value != null ? value.toString() : "<null>");
return this;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, …Run Code Online (Sandbox Code Playgroud) 我制作了一个简单的JavaFX应用程序。在此应用程序中,有一个2列的树形表和一个复选框。如果选中此复选框,则第2列将可见,否则不可见。为此,我将树形表的列可见属性绑定到复选框selected属性。当我单击复选框时,列状态会发生变化,但同时会给出。
原因:java.lang.RuntimeException:TreeTableColumn.visible:无法设置绑定值。
如果我使用双向绑定,则不会出现此错误。但是我不需要双向绑定。是错误还是我没有正确使用绑定?请使用下面的代码重现此错误。我使用jdk1.8.0_111。
JavaFXApplication.java
package test;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class JavaFXApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
FXMLDocumentController.java
package test;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.TreeTableColumn;
import …Run Code Online (Sandbox Code Playgroud) 
在java中是否有任何自定义插件(如带有可编辑java组件的JTreeTable),如上图所示.
我知道这可以通过扩展JTreeTable或JXTreeTable类或使用TreeCellEditor等来完成......但是,我需要一个非常精确的结构,如上图所示,请指导我并提前致谢.
为了防止JTree节点崩溃,可以使用该setExpandedState()方法。
我没有看到 SwingXJXTreeTable类的类似方法,并且似乎JXTreeTable没有扩展JXTree(它扩展了 JTree)。
关于如何防止根节点在 上崩溃有什么建议吗JXTreeTable?
这里仍然是一个Java新手,为了我自己的利益而尝试过于先进.不过,这就是我需要做的:JXTreeTable中的一个复选框.我的主要课程:
package info.chrismcgee.sky.production;
import info.chrismcgee.sky.production.treetable.NoRootTreeTableModel;
import java.awt.Checkbox;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.swingx.JXTreeTable;
public class TestFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = -1899673458785493250L;
private JXTreeTable treeTable;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
TestFrame frame = new TestFrame();
frame.setVisible(true);
} catch …Run Code Online (Sandbox Code Playgroud) java ×12
jxtreetable ×12
swing ×10
swingx ×8
jtree ×2
jtreetable ×2
javafx-8 ×1
jcheckbox ×1
jtable ×1
object ×1
renderer ×1
selected ×1
tablemodel ×1
treetable ×1