My code for custom button is:
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
}
}
This is to create a JLabel with custom 2D Graphics. The problem is that I am trying to center the text in the JLabel and this be should valid for any size the used in the constructor.
Currently, I need to calculate the values and set the second and third parameters of drawString
accordingly.
Question: Is there a general way of centering a text on JLabel whose size may differ with each instance?