我的自定义按钮代码是:
public class GreyButton extends JLabel {
private int ButtonWidth,
ButtonHeight;
String ButtonText;
public GreyButton(String BText, int BWidth, int BHeight) {
super(BText);
this.ButtonHeight = BHeight;
this.ButtonWidth = BWidth;
this.ButtonText = BText;
setGreyButton();
}
private void setGreyButton() {
this.setPreferredSize(new Dimension(this.ButtonWidth, this.ButtonHeight));
this.setBackground(Color.LIGHT_GRAY);
this.setOpaque(false);
this.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
this.setForeground(Color.WHITE);
this.setHorizontalAlignment(SwingConstants.CENTER); //This line
}
@Override
public void paint(Graphics g) {
paintComponent(g);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D Shape = (Graphics2D) g;
AlphaComposite newComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
Shape.setComposite(newComposite);
Color[] FillArray = {Color.WHITE, Color.GRAY};
float[] Distribution = {0.85f, 1.0f};
GradientPaint Fill = new GradientPaint(10, 8, Color.BLACK, 10, 72, Color.WHITE);
Paint OldPaint = Shape.getPaint();
Shape.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Shape.setPaint(Fill);
Shape.fillRect(0, 0, ButtonWidth, ButtonHeight);
Shape.setPaint(OldPaint);
Shape.setFont(new Font("Monospace", Font.BOLD, 14));
Shape.drawString(ButtonText, 0, 0); //This line
}
}
这是使用自定义2D图形创建JLabel.问题是我试图将文本居中在JLabel中,这应该对构造函数中使用的任何大小都有效.
目前,我需要计算值并相应地设置drawString的第二个和第三个参数.
问题:是否有一种将文本集中在JLabel上的一般方法,其大小可能因每个实例而异?