我如何平移和缩放JComponents?

时间:2012-04-03 23:28:40

标签: java swing jung

我正在尝试为图形编程构建用户界面。我想使用JUNG 来处理绘图的图形方面。我不想使用Graphics2D绘制所有小部件,而是希望尽可能多地使用Swing小部件来利用Swing的事件架构。

我希望能够平移,缩放,旋转绘制图形的画布,但仍然能够操作Swing小部件,只要它们足够大就可以看到。我还希望根据我选择的JUNG布局算法自动布局小部件。

如何组合Graphics2D图纸和Swing组件?

我知道JComponents会使用他们的paint()方法来绘制自己。我无法理解的是如何创建可受Graphics2D转换影响的Swing对象,并仍保留其所有事件处理。我不能只显示组件的图像。该组件必须是实时的。

我尝试了对小部件进行子类化并将AffineTransform添加到传递给父级paint方法的图形对象中。它会旋转小部件,但裁剪似乎已关闭。

有什么建议吗?目前,如果可以,我想避免添加另一个库。

3 个答案:

答案 0 :(得分:2)

JXLayer项目已实现将整个UI转换为不同的规模。

您可以查看this demo

答案 1 :(得分:2)

例如,JDigit extends JButton并覆盖paintComponent()以缩放到其封闭Container的大小。对于速度,组件使用预渲染的字形,但deriveFont()仅略慢。通过实现Icon接口可以获得类似的结果。这个example将按钮网格缩放为几个预先确定的大小,这个example完全放弃了组件,缩放了图形上下文和所有内容。

答案 2 :(得分:1)

根据我的研究,使用Piccolo2D可以平移和缩放Swing元素。使用JUNG的图形布局算法来布局图形和Piccolo2D PSwing节点,我可以生成一个可用的Swing组件图,可以通过算法布局,并且可以缩放和平移。