0

カスタムボタンを作成しました。そのために、paintComponenet メソッドをオーバーライドしました。そのようなボタンにボタンテキストを設定するにはどうすればよいですか? drawStringメソッドでやってみました。しかし、どのx、y値を与えるべきですか? (g.drawString("ボタンのテキスト",x,y))。誰かがこれを処理した場合は、私までお願いします。

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    DefaultButtonModel bmodel = (DefaultButtonModel) super.getModel();

    Image im = (new ImageIcon("image")).getImage();
    System.out.println("im is "+im.getSource());
    System.out.println("widthis" + im.getWidth(this));
    int imageX = (getWidth() - im.getWidth(this)) /2;
    int imageY = (getHeight() - im.getHeight(this)) / 2;
    if(!super.isEnabled()) {
        System.out.println("in disabled");
        g.drawImage(disabled, imageX, imageY, this);
       g.drawString( super.getText(), super.getX(),(int) (super.getY() / (1.9)));
    }
    else {
        if(bmodel.isPressed()) {
           System.out.println("in pressed");
            g.drawImage(down, imageX, imageY, this); 
        } else if(bmodel.isRollover()) {
            System.out.println("in roll overed");
            g.drawImage(highlight, imageX, imageY, this);
        } else if(bmodel.isEnabled()) {
            System.out.println("in enabled");
            g.drawImage(normal, imageX, imageY, this);
        } else {
            System.out.println("in else");
            g.drawImage(normal, imageX, imageY, this);
        }
        g.drawString( super.getText(), super.getX(),(int) (super.getY() / (2.5)));
    }



}
4

2 に答える 2

1

super(g)paintComponent メソッドの最初の行で呼び出して、メソッドを使用setTextしてボタンの文字列を変更してみませんか。

このようなもの:

protected void paintComponent(Graphics g)
{
   super.paintComponent(g);
   // do your customized painting here...
}
于 2009-12-12T11:50:18.900 に答える
0

あなたは何をしようとしていますか、あなたは実際の要件を決して述べませんでしたか?画像の上にテキストを描画しようとしているようです。その場合、カスタムペイントは必要ありません。使用するだけです。

button.setHorizontalTextPosition(JButton.CENTER);
button.setVerticalTextPosition(JButton.CENTER);

必要に応じて、ロールオーバーと押されたアイコンを設定できます。

于 2009-12-12T15:43:19.060 に答える