java - 设置drawString,使(0,0)位于绘图区域内

标签 java swing drawstring

我有一个我一生都无法解决的问题。我要求用户输入,然后它会生成一个 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以确定使用什么坐标。显示的示例 herehere将坐标传递给 drawString(),但您也可以将它们传递给 translate()。完成后请务必恢复原点。

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

关于java - 设置drawString,使(0,0)位于绘图区域内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45227294/

相关文章:

Java - 在 Swing 中加入多个绘图字符串

java - 默认情况下,不公开实体类中的字段,使用 Spring Data Rest 和 Jpa

java - 单击具有内部组件的 JPanel

java - 使用 java 检测代理运行应用程序时生成的 WebSphere Liberty 代码转储

java - JComboBox 让 GUI 消失

java - 如何将值传递给paintComponent

java - drawString 方法不起作用

c# - 如何使用 Graphics.DrawString 绘制完全单色文本?

java - Spring 抛出 HttpMediaTypeNotAcceptableException : Could not find acceptable representation due to dot in url path

java - Android双数字格式化问题