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());
}
能否在 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());
}