将 drawString 设置为 (0,0) 位于绘制区域内



我有一个问题,我一生都无法弄清楚。 我要求用户输入,然后它制作一个 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);
}
}

然后在我的文本课上:

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)的后续调用将呈现具有这些坐标处基线的文本。使用FontMetrics确定要使用的坐标。此处和此处显示的示例将坐标传递给drawString(),但您可以改为将它们传递给translate()。完成后,请务必恢复原点。

FontMetrics fm = g2d.getFontMetrics();
g2d.translate(0, fm.getAscent());
g2d.drawString(this.text, 0, 0);
g2d.translate(0, 0);

对 JFrame 使用流布局或网格布局,并添加 JLabel 来设置文本。

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
JLabel label = new JLabel();
label.setText("Text");
frame.add(label);
frame.setVisible(true);

最新更新