调用repaint()时字符串字体大小更小

Chr*_*ith 2 java paint font-size

当我绘制一个字符串时g.drawString(),生成的文本小于设置的字体.如果您运行以下代码,您可以看到显示所需的字体大小,然后在调用之前repaint()我尝试过的第二个线程调用时显示较小的字体,但这没有帮助.有任何想法吗?SwingUtilities.invokeLater()repaint

import java.awt.Font;
import java.awt.Graphics;

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

public class Test {
    static JPanel   panel;

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        panel = new JPanel() {
            private static final long   serialVersionUID    = 1L;

            public void paint(Graphics g) {
                g.clearRect(0, 0, panel.getWidth(), panel.getHeight());
                g.drawString("TEST", 20, 100);// Where I draw the string
            }
        };
        panel.setFont(new Font("Arial", Font.BOLD, 30));// The desired font
        frame.add(panel);
        frame.setSize(500, 500);
        frame.setVisible(true);
        new Thread() {// This thread calls repaint() after two seconds
            public void run() {
                try {
                    Thread.sleep(2000);
                }
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
                panel.repaint();
            }
        }.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 6

  1. 不要覆盖paint,而是覆盖paintComponent.
  2. 总是调用super方法.

例如

  panel = new JPanel() {
     private static final long serialVersionUID = 1L;

     @Override
     protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // g.clearRect(0, 0, panel.getWidth(), panel.getHeight());
        g.drawString("TEST", 20, 100);// Where I draw the string
     }
  };
Run Code Online (Sandbox Code Playgroud)