将drawString设置为(0,0)在绘图区域内

时间:2017-07-21 00:49:14

标签: 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);
}
}

所以,如果你运行它,你会看到下半部分,例如,你好。

如果我设置

this.text, 10, 10
然后你可以看到整个单词。

有没有办法让(0,0)从最左上角开始并让文字完全在实际绘图区域内?

2 个答案:

答案 0 :(得分:2)

您可以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);

答案 1 :(得分:1)

对JFrame使用Flow Layout或Grid Layout并添加JLabel来设置文本。

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());

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