2016-04-10 16 views
0

私はお互いに画像を入れようとしています。これらの画像をjbuttonsに保存しているので、すでに存在するjbuttonの上にjbuttonsを配置する方法があるかどうかを知りたいと思います。助けてください。JButtonとイメージを別のJButtonの上に置く方法

編集: だから私は
Jbutton b = new JButton()を持っていて、それに画像アイコンを設定したとしましょう。 他にも JButton x = new JButton()があり、画像アイコンに設定されています。

これらのJButtonには、2つの異なるアイコンが含まれています。私は画像がお互いに重なり合うようにしたい。下のボタンが大きい画像で、上のボタンが小さいサイズで表示されるように、両方の画像を表示します。これがはっきりしているかどうかは不明です。

+0

お試しいただきありがとうございます。あなたが何を望んでいるのかを理解することは難しいです。 – rdonuk

答えて

-1

最も簡単な解決策は、この

JButton j1=new JButton("a"); 
j1.setLayout(new BorderLayout()); 
j1.setBackground(Color.red); 
add(j1); 
JButton j2=new JButton("b"); 
j2.setBackground(Color.yellow); 
j1.add("Center", j2); 

です - 一般的に使用されていないが、

あなたが特定の位置とサイズを指定したい場合は、nullのレイアウトは、ここでのソリューションです:

JButton j1=new JButton("a"); 
j1.setLayout(null); 
j1.setBackground(Color.red); 
JButton j2=new JButton("b"); 
j2.setBackground(Color.yellow); 
j2.setBounds(100, 100, 50, 50); 
j1.add(j2); 
add(j1); 
+0

ご協力いただきありがとうございます。それは私がそれを解決するのを助けた。ただし、jbuttonを追加した後、サイズを変更しようとすると2nd jbuttonのサイズが変更されません。どんなサイズにしても、2nd jbuttonは常に同じです。これに関するアドバイスは? – Kisuna97

+1

(1-)は、特に適切な解決策がすでに与えられている場合に、ヌルレイアウトを提案します。これはOPがまだ見つけていない他の問題を引き起こすでしょう。 @ Kisuna97、 'これについてのアドバイスは? ' - はい私はあなたに答えを与えた。ショートカットを取らないでください。ショートカットが長期的には機能しない理由があります。 – camickr

+0

@camickr OverlayLayoutを使用する場合、子ボタンのサイズをどのように変更しますか? 'setSize()'と 'setPreferredSize()'を使っても動作しません。 – Kisuna97

2

OverlayLayoutを使用して、コンポーネントを重ねることができます。

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

public class SSCCE extends JPanel 
{ 
    public SSCCE() 
    { 
     setLayout(new OverlayLayout(this)); 

     JButton child = new JButton(new ImageIcon("child.jpg")); 
     child.setAlignmentX(JButton.CENTER_ALIGNMENT); 
     child.setAlignmentY(JButton.CENTER_ALIGNMENT); 

     JButton parent = new JButton(new ImageIcon("parent.jpg")); 
     parent.setAlignmentX(JButton.CENTER_ALIGNMENT); 
     parent.setAlignmentY(JButton.CENTER_ALIGNMENT); 

     add(child); 
     add(parent); 
    } 

    @Override 
    public boolean isOptimizedDrawingEnabled() 
    { 
     return false; 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("SSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new SSCCE()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(() -> createAndShowGUI()); 
/* 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
*/ 
    } 
} 

通常、塗装コードは、レイアウトマネージャが2次元でコンポーネントをレイアウトすることを前提としています。ただし、この場合は、コンポーネントがスタックされていることを示すためにisOptimizedDrawingEnabled()メソッドをオーバーライドする必要があります。これは塗装の効率を少し低下させますが、コンポーネントが適切に塗装されていることを確認するために必要です。

+0

これを行うには、jpanelでoverlayLayoutを使用する必要があります。私はすでに49枚のボードを持っているので、ボードの上にいくつかのボタンをオーバーレイするだけです。あなたのメソッドを行うには、私は49のjpanelsのように作成し、各パネルをオーバーレイする必要があります – Kisuna97

+0

@ Kisuna97、あなたはJLabelsを使用することができます。親のレイアウトをBorderLayoutに設定し、その子を親に追加します。 – camickr

+0

あなたはJLabelsを使うと言っていますか?しかし、私は1つの場所に3つのコンポーネントを持つことができる場所にどこが向いているのかわかりません。しかし、7 x 7で49個のパネルを使用し、overlayLayOut rightを使用して必要なだけ多くのコンポーネントを追加できます。 – Kisuna97