Java倒置文本-Bug还是特性?
在使用Java字体类和Swing时,我将字体大小设置为负值 我发现这会使文本被颠倒过来。这是一个bug还是一个特性?有人能解释为什么会发生这种行为吗 试一试:Java倒置文本-Bug还是特性?,java,swing,language-features,Java,Swing,Language Features,在使用Java字体类和Swing时,我将字体大小设置为负值 我发现这会使文本被颠倒过来。这是一个bug还是一个特性?有人能解释为什么会发生这种行为吗 试一试: import java.awt.Font; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class UpsideDown extends JFrame{ public UpsideDown(){
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();
}
}
似乎正在发生这样的事情:
- 使用您可能拥有的任何代码,在
图形上下文中绘制二维图形。(这将是一个覆盖Graphics2D
并以paintComponent(Graphics g)
开头的组件)例如,您可能有一个绘制图形的组件,如下所示:Graphics2D g2=(Graphics2D)g;
- 在进行绘图操作之前,插入以下两行:
g2.scale( -1.0, -1.0 ); g2.translate( -getWidth(), -getHeight() );
- 现在检查结果。它将完全朝上朝下,如下所示:
这给了很大程度的自由。如果你想反转图表,但要保持文本的笔直,一种方法是使字体大小为负。Voor字体坐标的< /P>是以字体大小作为等式的一部分来计算的。@ TrbjjrnravnnordEn森用WTE‘不是bug’前缀-我会认为这是一个答案。“无效操作”或“未定义行为”,因为没有“负字号”这类东西。与RGB颜色相比:如果某些实现允许您为红色设置负值,该怎么办?@Jongware这将是一个问题,因为图形驱动程序通常只为每种颜色使用一个字节。这可能会导致图形驱动程序崩溃,或者它会将
red=-1
环绕到red=255
:)是的,但这是因为RGB是以这种方式实现的(幸运的是,您添加了“通常”)。如果“字体大小”存储在无符号类型中,则也不会出现此问题。@不幸的是,Java没有无符号基元类型,并且编码人员没有向font
构造函数添加检查。