import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.FontMetrics; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; class BiColorLabel extends JLabel { private Color leftColor, rightColor; private String text; private int alignment; public BiColorLabel(Color leftColor, Color rightColor) { this("", LEFT, leftColor, rightColor); } public BiColorLabel(int alignment, Color leftColor, Color rightColor) { this("", alignment, leftColor, rightColor); } public BiColorLabel(String text, Color leftColor, Color rightColor) { this(text, LEFT, leftColor, rightColor); } public BiColorLabel(String text, int alignment, Color leftColor, Color rightColor) { super(text); this.text = text; this.alignment = alignment; this.leftColor = leftColor; this.rightColor = rightColor; updateUI(); } public void paintComponent(Graphics g) { if (leftColor == null) leftColor = getBackground(); if (rightColor == null) rightColor = getBackground(); g.setColor(leftColor); g.fillRect(0, 0, this.getWidth() / 2, this.getHeight()); g.setColor(rightColor); g.fillRect(this.getWidth() / 2, 0, this.getWidth() / 2, this.getHeight()); g.setColor(Color.BLACK); // Grundlinie ermitteln FontMetrics fm = this.getFontMetrics(getFont()); int vPos = this.getHeight() / 2 + fm.getHeight() / 2 - fm.getDescent(); if (alignment == SwingConstants.RIGHT) { g.drawString(text, this.getWidth() - fm.stringWidth(text), vPos); } else if (alignment == SwingConstants.CENTER) { g.drawString(text, this.getWidth() / 2 - fm.stringWidth(text) / 2, vPos); } else { g.drawString(text, 0, vPos); } } } public class BiColorLabelBsp { public BiColorLabelBsp() { init(); } private void init() { JFrame frame = new JFrame("BiColorLabel"); frame.setLayout(new FlowLayout()); BiColorLabel bcl = new BiColorLabel("ene mene muh", SwingConstants.CENTER, new Color(255,240, 230), new Color(220, 255, 230)); bcl.setPreferredSize(new Dimension(300, 30)); frame.add(bcl); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new BiColorLabelBsp()); } }