2012-02-04 14 views
5

Swingのラベル上にボタンをオーバーレイすることはできますか?Java SwingでJLabel上にJButtonをオーバーレイしますか?

たとえば、画像とテキストのないJLabelを使用していて、このJLabelにボタンをオーバーレイしたいとします。ない、私はこれを実現することができますどのように任意のアイデアは、あなたに感謝した場合

myLabel = new javax.swing.JLabel(new ImageIcon(myPicture)); 

:ラベルのようなものを定義しています。

EDIT:は実際に私は、JLabelのにJPanelのを追加する方法について読んで、私はボタンレイアウトでパネルを追加するときに、それがうまくコンパイルが、何も画像

UPDATEで、ちょうどJLabelの表示されていない:示唆したように by @ paranoid-android、何とか私は私の問題を解決しました。しかし、私はまだJLabelの上にオーバーレイされたコンポーネントの位置をカスタマイズする方法を知っていなければなりません。おそらく通常はレイアウトを描画するためにネットビーンを使用するので、ハードコーディングが必要です。このよう

何かが働いた:

ImagePanel(Image image, int id) { 
    this.image = image; 
    this.tile = false; 

    JButton backButton = new JButton(); 
    JButton nextButton = new JButton(); 
    backButton.setText(" BACK "); 
    nextButton.setText(" NEXT "); 


    add(backButton); 
    add(nextButton); 

}; 

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(image, 0, 0, getWidth(), getHeight(), this); 
} 
+0

ボーダーなしでJButtonを作成しようとしていますか?またはクリック可能なJLabelですか? – Raceimaztion

+0

@Raceimaztion、私は未装飾フレームに設定された画像を持つJLabelを持っているので、画面上には境界線や何もない画像しか表示されません。今私は、このイメージの上にそれらをオーバーレイすることによって他のオプションを追加したい、私はパネルで画像を試してみる必要があるかもしれないが、私は尋ねたものが実現可能な何かを知りたかったのですか? – Johnydep

+0

何が効いているのかを報告してください。 :) – rtheunissen

答えて

9

私が正しく理解していれば、それを行うための絶対的な最善の方法は、paintComponentを上書きすることですが、あなたは、JLayeredPaneを使用してそれを行うことができます。

// as part of your JPanel 
@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.drawImage(background, 0, 0, this); 
} 

次にあなたがにコンポーネントを追加することができますあなたの好きなように、パネルをJLabelのために必要とせずに。

2

あなたはボタンやラベルをオーバーラップすることができますが、固定レイアウトでこれを行う必要があります。あなたはgridBagLayoutでオフにすることができるかもしれないが、私はそれを疑う。

あなたが必要とするものはここにあります。

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

+0

実際に私はそれを試しましたが、GridBagLayoutは実際に重複を許可しません。 – Johnydep

関連する問題