Graphics2D在paintComponent中绘制完成后是否可以自适应宽高?

Is it possible to get adaptive Width & Height after Graphics2D finish painting in paintComponent?

能否在 paintComponent 方法中获取 Graphics2D 实例绘制的宽度和高度?

例如下面的MessageUnit,

    class MessageUnit extends JPanel {
        String msg;
        JPanel msgBox;

        public MessageUnit(String msg, JPanel msgBox) {
            this.msg = msg;
            this.msgBox = msgBox;
            setPreferredSize(new Dimension(msgBox.getWidth(), 10));
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            final Graphics2D g2D = (Graphics2D) g;
            g2D.drawString(msg, 10, 30);
        }
    }

能否获取G2D绘制字符串时使用的高度和宽度,以便重新设置大小,达到类似响应式布局的效果?

例如,如果绘制 msg 占据 100px,那么我可以将 MessageUnit 的宽度设置为 120px,这样看起来消息只是居中。

而下一条消息可能占了60px,那我把MessageUnit的宽度设置为80px,看起来消息又居中了。

可能吗?谢谢

如果您只需要绘制一个字符串,您可以获得它的未来大小,具体取决于字体和字符串本身。

public static void setSizeFromFont(Component component, Font font, String text){
    component.setSize((int)(Math.ceil(component.getFontMetrics(font).stringWidth(text))), font.getSize());
  }