【问题标题】:How can I scale JComponents up or down?如何放大或缩小 JComponents?
【发布时间】: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


【解决方案1】:

如果文本组件在缩放时必须保持可编辑状态,您可以将Font 以(粗略)比例缩放到比例因子,如图所示here

【讨论】:

  • 但是我可以使用float字体大小,比如30.2px吗?这样,就有可能得到几乎精确的比例。
  • 示例使用new Font(),但deriveFont() 可能是更好的选择。整数大小似乎足够了,但您可以尝试deriveFont(AffineTransform trans)
  • 我想我也可以使用.deriveFont(Float size),所以不要乱用AffineTransforms。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2016-05-24
  • 1970-01-01
  • 2015-06-26
  • 2017-05-03
  • 2023-03-15
相关资源
最近更新 更多