gpt4 book ai didi

java - 为什么 repaint() 在此方法中不能正常工作

转载 作者:行者123 更新时间:2023-12-02 02:17:27 25 4
gpt4 key购买 nike

这段代码的建议是使用 getStringHeight 方法而不使用 Graphics g在你的要求中。然后我编写这段代码,但是当执行命令 System.out.println(this.getStringHeight(font, string)); 时返回值始终为 0,因为 repaint()不能正常工作。我想知道为什么以及如何解决它。

基本上,在返回之前,我需要使用paintComponent来计算字符串高度,然后返回该值。

import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Panel extends JPanel {

String string = "HELLO WORLD";
Font font = new Font("arial", Font.LAYOUT_LEFT_TO_RIGHT, 30);
private int height;
private boolean gsh;

public Panel() {

System.out.println(this.getStringHeight(font, string));

}

public int getStringHeight(Font font, String string){
this.gsh = true;
repaint();
return this.height;
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (this.gsh == true) {
Graphics2D g2d = (Graphics2D) g;
FontMetrics metrics = g2d.getFontMetrics(font);
this.height = (int)font.createGlyphVector(metrics.getFontRenderContext(), string).getVisualBounds().getHeight();
this.gsh = false;
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame display = new JFrame();
display.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
display.setSize(600,400);
display.add(new Panel());
display.setVisible(true);

}

}

最佳答案

repaint() don't work properly.

repaint() 不执行任何操作至少有两个原因:

  1. repaint() 方法不会立即绘制组件。向 RepaintManager 发出绘制请求,它将安排稍后完成组件的绘制。

  2. 在这种情况下,您的代码将在类的构造函数中执行。该组件甚至还没有添加到框架中,因此 RepaintManager 将忽略该请求,因为面板只能在可见框架上绘制。

因此该方法返回时不会执行您的绘画代码,并且该值将始终为 0。

一旦框架可见,面板将被绘制,并且绘制代码将被执行。

I need to use the paintComponent to calculate the String Height and then return the value. import java.awt.Font;

绘画方法仅用于绘画。它不用于设置组件的属性。它不应计算高度或设置开关。

如果您尝试对组件进行某种大小计算,则应将逻辑添加到类的 getPreferredSize() 方法中。这是根据组件的属性计算组件大小的方法。

关于java - 为什么 repaint() 在此方法中不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com