/ / Wie zeichnet man ein JPanel als Nimbus JButton? - Java, Swing, Jpanel, Jbutton, Nimbus

Wie zeichne ich ein JPanel als Nimbus JButton? - Java, Swing, Jpanel, Jbutton, Nimbus

Im Nimbus-Look & Feel haben JButtons ein sehr aufgeräumtes und akkurates Aussehen mit abgerundeter Umrandung und schönem Hintergrund.
Ich möchte ein JPanel mit dem gleichen Aussehen rendern (offensichtlich hat es nicht den Status "gedrückt" usw.).
Was sind meine Möglichkeiten?

Antworten:

5 für die Antwort № 1

Der einfachste Weg, einen "Button Look" auf einem JPanel zu erhalten, ist wahrscheinlich die Erweiterung des JPanel und überschreiben paintComponent.

Hier ist der Nimbus JButton aussehen:

Bildbeschreibung hier eingeben

Und hier ist meine Umsetzung eines ähnlichen Blicks auf ein JPanel (Ich habe einen leeren Rand hinzugefügt, um dieses Beispiel zu zeigen, und die Ecken sind nicht durchscheinend):

Bildbeschreibung hier eingeben

Hier ist mein Code (mit Steigungen):

public class ColorDemo extends JPanel {

private final int gradientSize = 18;
private final Color lighterColor = new Color(250, 250, 250);
private final Color darkerColor = new Color(225, 225, 230);
private final Color edgeColor = new Color(140, 145, 145);
private final Stroke edgeStroke = new BasicStroke(1);
private final GradientPaint upperGradient = new GradientPaint(
0, 0, lighterColor,
0, gradientSize, darkerColor);


@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
GradientPaint lowerGradient = new GradientPaint(
0, getHeight()-gradientSize-1, darkerColor,
0, getHeight(), lighterColor);
g2.setPaint(upperGradient);
g2.fillRect(0, 0, getWidth()-1 , gradientSize);
g2.setPaint(darkerColor);
g2.fillRect(0, gradientSize, getWidth()-1, getHeight()-gradientSize-1);
g2.setPaint(lowerGradient);
g2.fillRect(0, getHeight()-gradientSize, getWidth()-1, getHeight()-1);
g2.setStroke(edgeStroke);
g2.setPaint(edgeColor);
g2.drawRoundRect(0, 0, getWidth()-1, getHeight()-1,
gradientSize/2, gradientSize/2);
}
}

AKTUALISIEREN

Hier ist ein verbesserter paintComponent Methode von AgostinoX das löste das Eckpunkt in meinem Code.

    @Override
public void paintComponent(Graphics g) {

Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALI‌​AS_ON);
float gradientPerc = (float)gradientSize/getHeight();
LinearGradientPaint lgp = new LinearGradientPaint(0,0,0,getHeight()-1,
new float[] {0, gradientPerc, 1-gradientPerc, 1f},
new Color[] {lighterColor, darkerColor, darkerColor, lighterColor});
g2.setPaint(lgp);
g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1,
gradientSize, gradientSize);
g2.setColor(edgeColor);
g2.setStroke(edgeStroke);
g.drawRoundRect(0, 0, getWidth()-1, getHeight()-1,
gradientSize, gradientSize);
}

Siehe auch meine Antwort auf So verbergen Sie die Pfeilschaltflächen in einer JScrollBar Hier erfahren Sie, wie Sie das Erscheinungsbild von Nimbus anpassen können. Und sehen Sie die Nimbus-Standardeinstellungen für Farben und Maler.