我有一个非常大的程序,目前正在使用SWT.该程序可以在Windows,Mac和Linux上运行,它是一个包含许多元素的大型桌面应用程序.现在SWT有点老了我想切换到Swing或JavaFX.我想听听你对三件事的看法.
我主要担心的是桌面GUI应用程序会有什么好处?(我在网上看了很多人都认为JavaFX和Swing一样好,但除了简单的意见火焰战争之外我没有看到很多有效的论据).它必须适用于Windows,Mac和一些流行的Linux发行版.
什么更干净,更容易维护?
从头开始构建什么会更快?
我在我的应用程序中使用MVC方法,如果有任何帮助的话.
我找到了这个较旧的讨论:有没有人使用Swing的"swingx"扩展?,但我想知道SwingLabs,SwingX的当前状态.一堆下载地址等都被破坏了,例如:
https://swingx.dev.java.net http://swinglabs.org/projects.jsp上的第一个链接
https://swingx.dev.java.net/files/documents/2981/153005/swingx-1.6.2-bundle.zip最新稳定下载
等等...
这只是一个替换新域名的问题,还是甲骨文摧毁了这些活动?
定期询问类似的问题,但其中许多答案已经过时.
我需要用Java构建一个跨平台的桌面应用程序,其GUI与当代桌面应用程序的质量相当.
Swing是默认选择,但是我还没有遇到一个Swing应用程序,它至少看起来不太过时和笨重(主观,我知道,但是使用GUI很难避免审美判断).
我注意到新的比特币客户端现在使用带有Java绑定的QT,并且确实具有吸引人的用户界面,但这样做的缺点是它不再是纯Java.
当我搜索与Swing相关的库时,我发现的大部分内容都是5岁或更大,尽管桌面应用程序的美学从那时起已经有了很大的发展.
如果您需要从头开始构建Java桌面应用程序,那么它将用于GUI?
对a应用过滤JTree以避免某些节点/叶子出现在渲染版本中JTree.理想情况下,我正在寻找一个允许动态过滤器的解决方案,但如果我能让静态过滤器工作,我会很高兴.
为了使它更容易一些,让我们假设JTree只支持渲染,而不是编辑.应该可以移动,添加,删除节点.
一个例子是a上面的搜索字段JTree,而在键入时,JTree只显示带有匹配的子树.
一些限制:它将用于可以访问JDK和SwingX的项目中.我想避免包含其他第三方库.
我已经想到了一些可能的解决方案,但这些都不是理想的
基于模型的过滤
TreeModel以过滤掉一些值.快速而简单的版本很容易编写.过滤掉节点,并且在过滤器或委托TreeModel的每次更改时,装饰器都可以触发整个树发生变化的事件(treeStructureChanged根节点作为节点).将它与恢复选择状态和扩展状态的侦听器相结合JTree,你会得到一个或多或少有效的版本,但是来自它的事件TreeModel都搞砸了.这或多或少是这个问题中使用的方法TreeModel但尝试点燃正确的事件.我(还)没有设法提出这个的工作版本.它似乎需要委托的副本,TreeModel以便能够在从委托模型中删除节点时使用正确的子索引触发事件.我认为有更多的时间我可以让它工作,但它只是感觉不对(过滤感觉像视图应该做的事情,而不是模型)TreeModel.但是,这完全是不可重用的,并且可能和编写装饰器一样困难TreeModel基于视图的过滤
这似乎是要走的路.过滤不应影响模型,只影响视图.
我看了RowFilter上课.虽然javadoc似乎建议你可以结合使用它JTree:
当与JTree相关联时,条目对应于节点.
我找不到RowFilter(或RowSorter)和JTree班级之间的任何联系.RowFilterSwing教程的标准实现似乎表明RowFilter只能直接使用JTable(参见参考资料JTable#setRowSorter).没有类似的方法可供选择JTree
JXTreejavadoc.它有一个ComponentAdapter可用的,并且javadoc ComponentAdapter表示RowFilter可以与目标组件进行交互,但我看不出如何建立RowFilter和之间的链接JTreeJTable使用RowFilter …我想使用带有maskFormatter的jxdatepicker.我试过了
MaskFormatter maskFormatter = new MaskFormatter ("##/##/####");
JFormattedTextField field=new JFormattedTextField (maskFormatter);
jXDatePicker.setEditor (field);
Run Code Online (Sandbox Code Playgroud)
和
MaskFormatter maskFormatter = new MaskFormatter ("##/##/####");
maskFormatter.install (jXDatePicker.getEditor ());
Run Code Online (Sandbox Code Playgroud)
第一种和第二种解决方案都不起作用
PS:JFormattedTextField使用MaskFormatter
AND jXDatePicker工作正常,操作简单JFormattedTextField
在这个问题中,我问如何使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) 在JXTaskPaneJava中Swing的使用有一个标题栏.其中有一个扩展/收缩按钮.我希望能够在标题栏中添加我自己的操作,该标题栏将显示在展开/收缩按钮旁边.
我怎样才能做到这一点?我尝试了很多次,但没有得到预期的结果.我创建了一个新的JButton并将其位置设置在标题栏坐标上,但它已添加到元素中.
我附上了一个屏幕截图,在标题栏中显示了一个帮助类型操作,以显示我的意思.
我想在swing应用程序中可视化地理地图.我发现只有swingx地图api.
你知道其他开源地图api吗?
事实上,我知道如何使用CTRL+ Z(Undo)和CTRL+ Y(Redo)与一个JTextField实现.但是我的Swing应用程序中有数百个文本组件,所以有没有办法将它应用于我的应用程序中的所有文本组件,所以当我在任何文本组件中单击CTRL+ Z时,它将撤消该字段中的最后一个条目?
我试图在EventQueue中实现它,但它没有用!
java ×10
swingx ×10
swing ×9
datepicker ×1
javafx ×1
jtree ×1
jxtaskpane ×1
jxtreetable ×1
map ×1
patch ×1
redo ×1
treetable ×1
undo ×1