在 Java GUI 中的矩形内显示代码
Displaying code inside rectangle in Java GUI
// Eine einfache grafische Benutzeroberfläche mit Swing
//von der Zeile 3 bis zur Zeile 5; Impotieren von Bibliothek
import java.awt.*;
import javax.swing.*;
import java.awt.Graphics;
public class HelloGUI extends JFrame { // public class HelloGui
public HelloGUI (String title) {
super(title);
getContentPane().add("North",new JButton("Hello World"));
setSize(400,400);
setVisible(true);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
public void paint (Graphics g) {
/* Das Verwenden von pain Methode
* Graphics ist ein Parameter
* in g ist das Parameter Graphics gespeichert
*/
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
}
public static void main(String args[]) {
new HelloGUI("Hello World ");
}
}
0 Antworten
我想写一个简单的 java gui 应用程序,它显示 Strin“Hello world”,但对我来说非常重要的是“Hello world”必须在一个矩形内。
所以使用方法 g.drawRect()
绘制矩形,使用方法 g.drawString()
显示字符串“Hello World!”或任何其他消息。
代码有效,但 Hello World 没有显示在 reactangle 旁边。
谁能帮我在矩形内显示字符串“Hello Wolrd!”……我试过了,但没用。那是我的代码!发件人
所以这是我的结果的截图
enter image description here
您的 String
实际上在矩形内,在左上角。但是它没有考虑字体大小。下面的代码应该将文本放在矩形的边界内:
public void paint (Graphics g) {
/* Das Verwenden von pain Methode
* Graphics ist ein Parameter
* in g ist das Parameter Graphics gespeichert
*/
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
int x = 100;
int y = 100;
g.drawRect(100,100,200,200);
g.setColor(Color.RED);
// add an offset to y coordinate
Font font = g.getFont();
g.drawString(insideRect, x ,y + font.getSize());
}
编辑:要使文本居中,您应该调整矩形和文本的高度和宽度,更改文本 x
和 y
坐标.下面我根据矩形和文本的 width/height 创建了 widthOffset
和 heightOffset
:
public void paint (Graphics g) {
/* Das Verwenden von pain Methode
* Graphics ist ein Parameter
* in g ist das Parameter Graphics gespeichert
*/
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
int x = 100;
int y = 100;
g.drawRect(100,100,200,200);
g.setColor(Color.RED);
// center the text inside the rectangle
Font font = g.getFont();
FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true);
Rectangle2D textRectangle = font.getStringBounds(insideRect, frc);
int textWidth = (int) textRectangle.getWidth();
int textHeight = (int) textRectangle.getHeight();
int widthOffset = 100 - textWidth/2; // 100 = rectangle width / 2
int heightOffset = 100 + textHeight/2; // 100 = rectangle height / 2
g.drawString(insideRect, x + widthOffset ,y + heightOffset);
}
对于 运行 上面的代码片段,您还应该导入:
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
我建议您先看看 Working with Text APIs
绘制文字时,文字从基线向上绘制(即y
位置代表基线,(大部分)文字绘制在其上方)
* 来自 Measuring Text
为了绘制文本使其显示在 y
位置“下方”,您需要将 y
位置偏移字体的 ascent
高度.
例如...
FontMetrics fm = g2d.getFontMetrics();
g2d.drawRect(100, 100, 200, 200);
g2d.setColor(Color.RED);
g2d.drawString(insideRect, x, y + fm.getAscent());
But why not use Font#getSize
?
Font#getSize
"Returns 这个字体的磅值" (来自JavaDocs), 字体的物理要求可能因渲染工作流程而异,并不是字体物理高度(或渲染属性)的“真实”度量。
您还应该仔细看看 Painting in AWT and Swing and Performing Custom Painting 以更好地了解绘画在 Swing 中的工作方式以及您应该如何使用它,因为您最终将无休止地您当前的方法存在问题。
可运行示例
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
int x = 100;
int y = 100;
FontMetrics fm = g2d.getFontMetrics();
g2d.drawRect(100, 100, 200, 200);
g2d.setColor(Color.RED);
g2d.drawString(insideRect, x, y + fm.getAscent());
g2d.dispose();
}
}
}
如果要使文本居中(水平和垂直),您需要了解“绝对”居中或“基线”居中(在垂直轴上)的区别,也就是说,您是否尝试基于文本居中在它的基线或它的整体高度上?两者有细微差别
例如...
- Java center text in rectangle
- Java - How to visually center a specific string (not just a font) in a rectangle
// Eine einfache grafische Benutzeroberfläche mit Swing
//von der Zeile 3 bis zur Zeile 5; Impotieren von Bibliothek
import java.awt.*;
import javax.swing.*;
import java.awt.Graphics;
public class HelloGUI extends JFrame { // public class HelloGui
public HelloGUI (String title) {
super(title);
getContentPane().add("North",new JButton("Hello World"));
setSize(400,400);
setVisible(true);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
public void paint (Graphics g) {
/* Das Verwenden von pain Methode
* Graphics ist ein Parameter
* in g ist das Parameter Graphics gespeichert
*/
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
}
public static void main(String args[]) {
new HelloGUI("Hello World ");
}
}
0 Antworten
我想写一个简单的 java gui 应用程序,它显示 Strin“Hello world”,但对我来说非常重要的是“Hello world”必须在一个矩形内。
所以使用方法 g.drawRect()
绘制矩形,使用方法 g.drawString()
显示字符串“Hello World!”或任何其他消息。
代码有效,但 Hello World 没有显示在 reactangle 旁边。
谁能帮我在矩形内显示字符串“Hello Wolrd!”……我试过了,但没用。那是我的代码!发件人
所以这是我的结果的截图
enter image description here
您的 String
实际上在矩形内,在左上角。但是它没有考虑字体大小。下面的代码应该将文本放在矩形的边界内:
public void paint (Graphics g) {
/* Das Verwenden von pain Methode
* Graphics ist ein Parameter
* in g ist das Parameter Graphics gespeichert
*/
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
int x = 100;
int y = 100;
g.drawRect(100,100,200,200);
g.setColor(Color.RED);
// add an offset to y coordinate
Font font = g.getFont();
g.drawString(insideRect, x ,y + font.getSize());
}
编辑:要使文本居中,您应该调整矩形和文本的高度和宽度,更改文本 x
和 y
坐标.下面我根据矩形和文本的 width/height 创建了 widthOffset
和 heightOffset
:
public void paint (Graphics g) {
/* Das Verwenden von pain Methode
* Graphics ist ein Parameter
* in g ist das Parameter Graphics gespeichert
*/
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
int x = 100;
int y = 100;
g.drawRect(100,100,200,200);
g.setColor(Color.RED);
// center the text inside the rectangle
Font font = g.getFont();
FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true);
Rectangle2D textRectangle = font.getStringBounds(insideRect, frc);
int textWidth = (int) textRectangle.getWidth();
int textHeight = (int) textRectangle.getHeight();
int widthOffset = 100 - textWidth/2; // 100 = rectangle width / 2
int heightOffset = 100 + textHeight/2; // 100 = rectangle height / 2
g.drawString(insideRect, x + widthOffset ,y + heightOffset);
}
对于 运行 上面的代码片段,您还应该导入:
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
我建议您先看看 Working with Text APIs
绘制文字时,文字从基线向上绘制(即y
位置代表基线,(大部分)文字绘制在其上方)
* 来自 Measuring Text
为了绘制文本使其显示在 y
位置“下方”,您需要将 y
位置偏移字体的 ascent
高度.
例如...
FontMetrics fm = g2d.getFontMetrics();
g2d.drawRect(100, 100, 200, 200);
g2d.setColor(Color.RED);
g2d.drawString(insideRect, x, y + fm.getAscent());
But why not use
Font#getSize
?
Font#getSize
"Returns 这个字体的磅值" (来自JavaDocs), 字体的物理要求可能因渲染工作流程而异,并不是字体物理高度(或渲染属性)的“真实”度量。
您还应该仔细看看 Painting in AWT and Swing and Performing Custom Painting 以更好地了解绘画在 Swing 中的工作方式以及您应该如何使用它,因为您最终将无休止地您当前的方法存在问题。
可运行示例
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
String insideRect = "Hello World!";
//this String should be displayed inside of the rectangel
int x = 100;
int y = 100;
FontMetrics fm = g2d.getFontMetrics();
g2d.drawRect(100, 100, 200, 200);
g2d.setColor(Color.RED);
g2d.drawString(insideRect, x, y + fm.getAscent());
g2d.dispose();
}
}
}
如果要使文本居中(水平和垂直),您需要了解“绝对”居中或“基线”居中(在垂直轴上)的区别,也就是说,您是否尝试基于文本居中在它的基线或它的整体高度上?两者有细微差别
例如...
- Java center text in rectangle
- Java - How to visually center a specific string (not just a font) in a rectangle