Mub*_*her 3 java javafx javafx-8
我需要做一件简单的事情。我有一个大的TreeView。以及菜单项下一个和上一个。在下一步,我必须选择下一个树项。树形列表看起来像这样
-Root(set visible hide is true for root)
--Parent 1
----Child 1
----Child 2
----Child 3
--Parent 2
----Child 1
----Child 2
Run Code Online (Sandbox Code Playgroud)
现在,通过按“下一个”或“上一个”菜单项,我致电
myTreeView.getSelectionModel().clearAndSelect(newIndex);
Run Code Online (Sandbox Code Playgroud)
通过这个,我设法选择下一个项目,并通过
myTreeView.getSelectionModel().scrollTo(newIndex)
Run Code Online (Sandbox Code Playgroud)
我已经设法滚动到选定的treeitem。
让我手动选择第一项。之后,我按下一步按钮。现在,这将导致一个奇怪的行为,即它总是在新的选定树状对象在视图中(可查看区域的边界)或视图外滚动。假设我有很多树木项目。我的要求是我只希望仅在新选择的树项不可见时才发生滚动。任何人都可以建议如何实现这一目标吗?
谢谢。
这个简单的事情并不是那么简单。这是JavaFX中的一个已知问题。参见问题RT-18965。
根据问题中的评论,我使其与我自己的TreeView一起使用。请注意,正如问题注释中所述,我依靠JavaFX中的内部类来获得最终结果。无法保证这些内部类将继续存在。
首先,创建一个从内部类派生的新外观(再次:危险):
import javafx.scene.control.TreeView;
import com.sun.javafx.scene.control.skin.TreeViewSkin;
import com.mycompany.mymodel.DataNode;
/**
* Only done as a workaround until https://javafx-jira.kenai.com/browse/RT-18965
* is resolved.
*/
public class FolderTreeViewSkin extends TreeViewSkin<DataNode>
{
public FolderTreeViewSkin(TreeView<DataNode> treeView)
{
super(treeView);
}
public boolean isIndexVisible(int index)
{
if (flow.getFirstVisibleCell() != null &&
flow.getLastVisibleCell() != null &&
flow.getFirstVisibleCell().getIndex() <= index &&
flow.getLastVisibleCell().getIndex() >= index)
return true;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
其次,将该皮肤应用于您关注的TreeView实例。
myTreeView.setSkin(new FolderTreeViewSkin(myTreeView));
Run Code Online (Sandbox Code Playgroud)
最后,在以下条件之前使用new方法作为条件scrollTo:
if (!((FolderTreeViewSkin) myTreeView.getSkin()).isIndexVisible( intThePositionToShow ))
myTreeView.scrollTo( intThePositionToShow );
Run Code Online (Sandbox Code Playgroud)
这就是对我有用的东西;我希望它可以帮助您或其他任何人。
| 归档时间: |
|
| 查看次数: |
2855 次 |
| 最近记录: |