Переопределить JButton paintComponent () не работает Java - PullRequest
3 голосов
/ 05 февраля 2012

Я хотел нарисовать свою собственную версию JButton, поэтому я переопределил метод paintComponent() и нарисовал градиент roundRect.Это работает, но после этого я хочу нарисовать на ней строку кнопки, и во время компиляции я не получил сообщений об ошибках.Но во время выполнения я вижу только roundRect, градиент, как я и предполагал (я тоже могу щелкнуть по нему), но строка невидима ...

Вот мой код:

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;

public class JIconButton extends JButton implements MouseListener
{
    private boolean mouseInside;
    public JIconButton(String file, String text)
    {
        super(text, new ImageIcon(file));
        setBorder(new LineBorder(Color.LIGHT_GRAY, 0, true));
        setContentAreaFilled(false);
        setFocusPainted(false);
        addMouseListener(this);
        setVisible(true);
    }

    public void mouseClicked(MouseEvent e)
    {

    }

    public void mouseEntered(MouseEvent e)
    {

    }

    public void mouseExited(MouseEvent e)
    {

    }

    public void mousePressed(MouseEvent e)
    {

    }

    public void mouseReleased(MouseEvent e) 
    {

    }

    @Override
    protected void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D)g.create();
        g2.setPaint(Color.BLACK);
        g2.drawString(getText(), 0, 0);
        g2.setPaint(new GradientPaint(
                new Point(0, 0), 
                Color.WHITE, 
                new Point(0, getHeight()), 
                Color.PINK.darker()));
        g2.fillRoundRect(0, 0, getWidth(), getHeight(), 30, 30);
        g2.dispose();

        //super.paintComponent(g);
    }
}

Ответы [ 3 ]

5 голосов
/ 05 февраля 2012

В соответствии с моим комментарием "у меня это сработало ...."
Например:

   @Override
   protected void paintComponent(Graphics g) {
      Graphics2D g2 = (Graphics2D) g.create();
      g2.setPaint(new GradientPaint(new Point(0, 0), Color.WHITE, new Point(0,
            getHeight()), Color.PINK.darker()));
      g2.fillRoundRect(0, 0, getWidth(), getHeight(), 30, 30);
      g2.setPaint(Color.BLACK);
      g2.drawString(getText(), 30, 12);
      g2.dispose();

      // super.paintComponent(g);
   }
3 голосов
/ 05 февраля 2012

Вы должны сделать:

g2.drawString(getText(), 0, 10);

y координаты строки должен быть больше 0, потому что это начальная точка базовой линии, а не точка верхнего левого углаиз коробки.Финальный код:

@Override
protected void paintComponent(Graphics g) {
  Graphics2D g2 = (Graphics2D) g.create();
  g2.setPaint(new GradientPaint(
  new Point(0, 0),
    Color.WHITE,
    new Point(0, getHeight()),
    color.PINK.darker()));
  g2.fillRoundRect(0, 0, getWidth(), getHeight(), 30, 30);
  // The drawString(string) must be put after the setPaint(gradient)
  g2.setPaint(Color.BLACK);
  g2.drawString(getText(), 0, 10);
  g2.dispose();
}
2 голосов
/ 05 февраля 2012

1) самым простым способом были бы методы JButton JButton (текст строки, значок значка) пример здесь

2) вы можете переопределить XxxButtonUI или измените GradientButton

...