【发布时间】:2012-10-08 02:22:18
【问题描述】:
在我的应用程序中,我需要在面板上的某个位置绘制JTextArea,并且我需要能够放大和缩小它。
对于定位,我可以使用绝对定位,但缩放会带来挑战 - 我可以通过调整 paintComponent 方法轻松地缩小它:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.scale(0.5,0.5);
super.paintComponent(g2);
}
但是按比例放大不起作用 - 因为我明确使用 setBounds 设置了组件的边界,所以部分按比例放大的组件最终不会被绘制。我该如何解决?
编辑:一点解释。
我维护的应用程序是一种图形编辑器,我需要添加一个功能,可以在工作区添加注释之类的东西,以便用户可以直接在该工作区键入文本。与大多数图形编辑器一样,工作区域可以移动和放大/缩小,因此用户输入文本的文本区域也应该移动和缩放。
【问题讨论】:
-
我从未见过这种功能——放大和缩小 JTextArea,图像是的,但从未见过 JTextArea。出于好奇,这样做的目的是什么。您的回复可能与您的问题的可能解决方案有关。另请注意,这里的大多数 Swing 专家都尽可能避免使用空布局和绝对定位,因此您可能也需要证明这一点。运气。
-
@HovercraftFullOfEels - 添加了解释。我看不出如何使用非绝对定位布局轻松完成此操作,但也许我遗漏了一些东西。
-
不,你可能是对的,绝对定位可能是唯一的方法。同样,我没有做过这样的事情,所以我不知道有什么要求是必要的。一个非常小的可编译和可运行的程序,它不需要我们无法使用的资源(图像、数据库)并且我们可以编译和运行,这将大大有助于我们充分理解您的问题,从而能够来提出可能的解决方案,sscce。
-
在这里想出 sscce 有点困难——因为整个问题归结为一个 JPanel,在上面绘制了东西,用户可以移动或滚动进/出(这部分添加了文本to panel 显然还没有实现)。但我会尝试做点什么。
-
我建议使用 JXLayer(Java 7 中的 JLayer),但现在这些例子有点少
标签: java swing scaling jtextarea paintcomponent