我需要像这样构建一个Swing GUI GUI Mockup http://img199.imageshack.us/img199/7271/mockupl.png 通常有40个旅游专栏。在每列中,每次巡回通常最多有20个订单。订单可以在旅行中组合在一起。应该可以在旅行中和其他旅行中水平放大到列,D& D订单。稍后表示可能会改变,包括例如图像。
我曾经使用JTable做过类似的事情,但是对于这个任务,我认为JTable不是正确的解决方案。而且由于订单分组,没有真正的行。
思索#1: 我想到使用JPanel,LayoutManager(或NullLayout)和JComponents,但我不确定这是否可行。思想#2: 另一种可能性是使用JPanel(在滚动面板中),将其大小设置为正确的值,覆盖paintComponent,并自己绘制所有内容(可能使用像TableCellRenderer这样的方法,不需要自己绘制所有内容 - - 即每种类型使用一个渲染器进行渲染,设置它的值,使用Graphics.translate然后使用component.paint ...)
在这两种方法中,我都需要自己实现D& D代码,#1可以使用JComponents D& D实现,但这在#2中也不会那么难。在#2中插入和删除订单似乎更容易,因为在#1中涉及一些LayoutManager(或者在下面的所有元素的NullLayout的情况下),否则只需要重新绘制。当创建了许多JComponents时,#1可能是内存问题,并且在我的第一次测试中初始添加(组件)似乎有点代价。
你怎么看?你会如何实现这个?或者也许有一些用于摆动的图书馆来创建这样的面板?答案 0 :(得分:2)
方法#1应该有效。我做了几次。
但是如果你想让你的拖放变得更简单,我会建议你使用JLists(没有滚动窗格)来完成你的订单。如果需要,您将能够在列表中以及它们之间实现D& D.要自定义订单的外观,您可以使用渲染器。在列表的顶部,您可以使用面板或标签作为游览标题。
所以我会创建专门的TourView组件,顶部是标题,底部是JList。然后按照您在#1中的想法添加许多TourView到面板。
在所有情况下,除了使用JTable之外,您必须自己实现列放大。
答案 1 :(得分:1)
扩展思想#1: 你可以用一连串的JPanel来做到这一点。您的父JPanel将在固定宽度列中布局一组Tour面板。 Tour类可以是包含TourHeader面板和一组ItineraryItem面板的面板。这可能会更重,但其他人可能更容易遵循。
你也可以重新考虑JTable选项。看一下this ancient site上的一些JTable示例,了解跨越行的单元格的一些想法。
答案 2 :(得分:1)
不知何故,我认为使用Infonode库(Docking Windows)可以提供帮助,它包括D& D,您可以轻松移动面板。 唯一的问题是“强行”它,例如使用一个RootWindow(每个Tour的基本组件,我不确定。
Infonode是一个GPL库,商业用途,根据您的需要,也有商业许可证。
有关信息,我与他们无关,但我使用这个框架,我喜欢它,它可能是一个解决方案,也许
答案 3 :(得分:0)
如果我去了路线1,我可能尝试使用FlowlLayout和一些JPanels,但过去我从来没有真正得到不错的结果,试图让事情达到我真正想要的尺寸,通常布局经理喜欢大小一切都适合你。