在使用Java字体类和Swing时,我将字体大小设置为负值。
我发现这会使文本被颠倒。这是一个错误还是一个功能?谁能解释为什么会出现这种情况?
尝试一下:
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class UpsideDown extends JFrame{
public UpsideDown(){
setSize(500,500);
setContentPane(new Panel());
setVisible(true);
}
public class Panel extends JPanel{
public void paintComponent(Graphics g){
Font f = new Font("Sans-Serif", Font.PLAIN, -50);
g.setFont(f);
g.drawString("Upside Down", 400, 100);
}
}
public static void main(String args[]){
new UpsideDown();
}
}
答案 0 :(得分:6)
似乎正在发生这种情况:
-50 * glyph_height
是否定的 - >向下而不是向上。答案 1 :(得分:2)
在 Swing 中,绝对数量很少(如果有的话)。几乎所有的量都是代数的,这意味着它们可以是负数,并且它们可以参与代数计算,这可能会改变它们的符号,就像乘以 -1 时的情况一样。例如,矩形可以具有负宽度,这完全没问题。字体也不例外。
Graphics2D
图形上下文中绘制 2D 图形的代码。 (这将是一个覆盖 paintComponent( Graphics g )
并以 Graphics2D g2 = (Graphics2D)g;
开头的组件)例如,您可能有一个绘制图形的组件,如下所示:在绘图操作之前,插入以下两行:
g2.scale( -1.0, -1.0 );
g2.translate( -getWidth(), -getHeight() );
现在检查结果。一切都将完全颠倒,就像这样:
不用说,如果您将 x 比例加倍而不将 y 比例加倍,那么所有内容都会被拉长,包括文本的字符,如下所示:
这说明了所有东西,一直到字符字形的各个坐标,都是 Swing 中的代数量。
这提供了很大的自由度。如果您想反转图形但要保持文本直立,实现它的一种方法是使字体大小为负。