独自のバージョンのJButtonをペイントしたいので、paintComponent()
メソッドをオーバーライドし、グラデーションroundRectを描画しました。これはうまくいきますが、その後、ボタンの文字列を描画したいので、コンパイル時にエラーメッセージは表示されません。しかし、実行時に、私は私が(私もそれをクリックすることができます)であることを、それを意図したのと同様に、roundRect、勾配を参照してください、しかし、文字列が見えない...JButtonのpaintComponent()をオーバーライドすると動作しませんJava
は、ここに私のコードです:
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);
}
}
グラデーションをペイントした後に*あなたが文字列*を描くとどうなりますか?ボタンのイメージで単にBufferedImageを作成し、ImageIconを作成してボタンのアイコンを設定するのが良い方法です。これで成功するには、マージンと境界線を取り除く必要があると私は思っていますが、 –
mouseIn、mousePressedなどをアニメーション化するためのmouseListenerが必要でしたが、うまくいきましたが、今はそのStringを描画したいだけです。 – 11684
@HovercraftFullOfEels私はそれを最初に試みたが、それはうまくいかなかった... – 11684