// 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 沒有顯示在反應角旁邊。任何人都可以幫我在矩形內顯示字串“Hello Wolrd!”...我嘗試過,但它沒有用。那是我的代碼!tnx 所以這是我的結果的截圖

*來自測量文本
為了繪制文本,使其看起來“低于”該y位置,您需要將該y位置偏移字體的ascent高度。
例如...
FontMetrics fm = g2d.getFontMetrics();
g2d.drawRect(100, 100, 200, 200);
g2d.setColor(Color.RED);
g2d.drawString(insideRect, x, y fm.getAscent());
但是為什么不使用
Font#getSize呢?
Font#getSize “回傳此字體的磅值”(來自JavaDocs),字體的物理要求可能因渲染作業流程而異,并且不是字體物理高度(或渲染屬性)的“真實”度量。
您還應該仔細查看在 AWT 和 Swing 中的繪畫和執行自定義繪畫,以更好地了解繪畫在 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 中心文本
- Java - 如何在矩形中以視覺方式居中特定字串(不僅僅是字體)
uj5u.com熱心網友回復:
你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坐標。下面我創建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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462475.html
下一篇:如何在框架Swing中居中標簽?
