我有一个我一生无法解决的问题。我要求用户输入,然后创建一个JFrame并显示单词。我想将单词显示在(0,0)处,但这似乎不在字段中,并在标题所在的顶部书写。这是我的代码:
import java.util.Scanner;
import javax.swing.*;
public MainWindow(String input){
JFrame frame = new JFrame();
frame.setSize(320, 240);
frame.setTitle("Draw String Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Text text = new Text(input);
frame.add(text);
frame.setVisible(true);
}
Scanner sc = new Scanner(System.in);
System.out.print("Enter a string: ");
String input = sc.nextLine();
new MainWindow(input);
}
}
然后在我的Text类中:
import java.awt.*;
import javax.swing.JComponent;
public class Text extends JComponent {
String text;
public Text(String txt){
this.text = txt;
}
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.drawString(this.text, 0, 5);
}
}
因此,如果运行此命令,您将看到例如“ hello”的下半部分。
如果我设置
this.text, 10, 10
然后您可以看到整个单词。
有没有办法使(0,0)从最左上角开始,并使文字完全位于实际绘制区域内?
最佳答案
您可以translate()
图形上下文的原点,以便它出现在您指定的坐标处。随后调用drawString(…, 0, 0)
将在这些坐标处使用baseline呈现文本。使用FontMetrics
确定要使用的坐标。 here和here中显示的示例将坐标传递给drawString()
,但是您可以将其传递给translate()
。完成后,请务必还原原点。
FontMetrics fm = g2d.getFontMetrics();
g2d.translate(0, fm.getAscent());
g2d.drawString(this.text, 0, 0);
g2d.translate(0, 0);