2017-11-26 7 views
0

JButtonの背景イメージを設定しています。つまり、JTableHeaderとします。 paintComponentを同じにすると、そのコンポーネントに設定されているテキスト値が削除されます。ボタンのテキスト値を削除するpaintComponent

どこが間違っているのですか?

JButton btn = new JButton(){ 
    @Override 
    public void paintComponent(Graphics g){ 
     Dimension size = this.getSize(); 
     g.drawImage(Toolkit.getDefaultToolkit().getImage("C:\\User\\Downloads\\MainMenu.jpg"), 0, 0, size.width, size.height, this); 
    } 
}; 
btn.setText("TEST WITH ME"); 
btn.setOpaque(true); 

enter image description here

+2

1)オーバーライドされたペイントメソッドでは、常に最初に「super」メソッドを呼び出します。これは、背景や枠などをペイントします。2) 'g.drawImage(Toolkit.getDefaultToolkit()。getImage(" C:\\ User \\ .. 'ペイントメソッド内でリソースをロードしません。アプリケーション起動時にイメージをロードし、クラスの属性として保存する3)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例]を投稿する(http://www.sscce.org /)4)画像を取得する方法の1つは、[このQ&A](http://stackoverflow.com/q/19209650/418556)に表示されている画像にホットリンクすることです。 –

+2

.. 'btn。 setText( "TEST WITH ME"); '5)ボタンコンストラクタでテキストを渡すことができます。6)ユーザにSHOUTをする必要はありません。" Test With Me "や" Test with me " –

+0

[イメージベースでJavaでカスタムJButtonを作成するにはどうすればいいですか?](https://stackoverflow.com/questions/8235991/how-to-create-a-custom-jbutton-in-java-with-イメージベース) – user1803551

答えて

0

あなたは画像の上にテキストをしたい場合

は、あなただけのボタンのプロパティを使用します。しかし、私はその答えを考え出しました。

@Override 
public void paintComponent(Graphics g){ 
    Dimension size = this.getSize(); 
    g.drawImage(Toolkit.getDefaultToolkit().getImage("C:\\User\\Downloads\\MainMenu.jpg"), 0, 0, size.width, size.height, this); 
    FontMetrics fm = g.getFontMetrics(); 
    int x = (getWidth() - fm.stringWidth("String Value To Set"))/2; 
    int y = ((getHeight() - fm.getHeight())/2) + fm.getAscent() ; 
    g.drawString(String Value To Set, x, y); 
} 
0

私は

ザ・JButtonの

の背景画像を設定していますが、カスタムペイントを行うには必要ではありません。ボタンにアイコンを追加するだけでボタンが画像をペイントします。私はずっと正しい私が本当に望んでいることを指定していないかもしれ

button.setHorizontalTextPosition(...); 
button.setVerticalTextPosition(...); 
関連する問題