2012-10-03 18 views
7

JFrameに2つのオブジェクトを表示したいとします。 JPanelにオブジェクトを追加してJFrameにJPanelを追加しようとしましたが、動作しませんでした。 ballとball1のオブジェクトをJFrameに直接追加しようとしましたが、最後に追加されたオブジェクトのみが表示されます。私は一度に両方のオブジェクトをJFrameに表示したい。以下のコードはball1オブジェクトのみを示しています。2つ以上のオブジェクトをJFrameに追加

JFrame f = new JFrame("Moving"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //making 2 objects 
    Ballbewegung2 ball = new Ballbewegung2(); 
    Ballbewegung3 ball1 = new Ballbewegung3(); 
    JPanel contentPane = new JPanel(new BorderLayout()); 
    JPanel contentPane1 = new JPanel(new BorderLayout()); 

    //adding objects to JPanel 
    contentPane.add(ball, BorderLayout.CENTER);     
    contentPane1.add(ball1, BorderLayout.CENTER);     

    //Adding JPanel to JFrmae 
    f.getContentPane().add(contentPane); 
    f.getContentPane().add(contentPane1); 
    f.setSize(500, 500); 
    f.setVisible(true); 

答えて

4

JFrameのコンテンツペインは、デフォルトでBorderLayoutレイアウトマネージャを持っています。つまり、コンポーネントを追加すると、そのコンポーネントがCENTERに配置されます。別のコンポーネントを追加すると、再びCENTERに入れられ、以前に追加されたコンポーネントが置き換えられます。

複数の構成要素を追加する方法の例:

JFrame f = new JFrame(); 

JPanel p = new JPanel(); 

p.add(new JButton("One")); 
p.add(new JButton("Two")); 

f.getContentPane().add(p, BorderLayout.CENTER); 

またはコンテンツペインにコンポーネントを追加するときにそれを置く(および異なる場所を指定)する場合、を指定:

JFrame f = new JFrame(); 

f.getContentPane().add(new JButton("One"), BorderLayout.NORTH); 
f.getContentPane().add(new JButton("Two"), BorderLayout.CENTER); 
+0

は、私は、彼らはまた、第二の方法を試してみましたshown.Iあるオブジェクトに対して異なる座標を与えている、それはまだ最初のオブジェクトを上書きします。 – user1717353

+0

間違って、 'f.getContentPane()'を2つの異なるコンポーネントを2回渡して呼び出しますが、制約は指定しません。そして、制約が明示的に指定されていないBorderLayoutを持つパネルは、コンポーネントをCENTER位置に追加し、2番目のコンポーネントは最初のコンポーネントを置き換えます。 – icza

5

をJPanelを使用して、JPanelを両方とも子供として保持し、単一のJPanelをJFrameコンテンツペインに追加することをお勧めします。

JFrame.add()メソッドの2回目の呼び出しは、別のレイアウトの場所を明示的に指定しないと、最初に追加されたJPanelを置き換えます。

BoxLayoutを使用した簡単な例:ここでは

JPanel mainPanel= new JPanel(); 
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); 

mainPanel.add(contentPane); 
mainPanel.add(contentPane1); 
contentPane.add(mainPanel); 
+0

JFrameに複数のボタンを追加するとコードがうまく動作しますが、クラスのオブジェクトでは機能しません。私はまた、3つのJPanlesを使い、mainPanelをJFrameに追加しようとしましたが、同じ出力を続けました。 – user1717353

1

が使用するJavaコンポーネントが Java Components

コードを次のとおりです。この

UI

のようなUIの何かを達成するための一例です:

// Call this function from the main 
private static void createAndShowGUI() { 
    // Create and set up the content pane. 
    MainPanel panel = new MainPanel(); 
    panel.setOpaque(true); // content panes must be opaque 

    // Display the window. 
    JFrame frmConsole = new JFrame("ITSME"); 
    frmConsole.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmConsole.setPreferredSize(new Dimension(640, 480)); 
    frmConsole.add(panel); 
    frmConsole.pack(); 
    frmConsole.setLocationRelativeTo(null); 
    frmConsole.setVisible(true); 
} 

クラスMainPanel

public class MainPanel extends JPanel implements ActionListener { 
    private static final long serialVersionUID = 1L; 
    private int m_nX, m_nY; 
    private int m_nHeight = 30, m_nWidthLabel = 500, m_nPadding = 2; 

    private JLabel m_lblFilename, m_lblFileGen; 

    public MainPanel() { 
     // TODO Auto-generated constructor stub 
     super(new BorderLayout()); 
     try { 
      this.setLayout(null); 
      this.setBorder(new TitledBorder(new EtchedBorder(), 
       "Dynamic Time Warping")); 

      m_nX = this.getX() + 12; 
      m_nY = this.getY() + 24; 

      // Add the Filename Label 
      m_lblFilename = new JLabel("Label1"); 
      m_lblFilename.setBorder(new LineBorder(Color.BLUE, 2)); 
      m_lblFilename.setBounds(nX, nY, m_nWidthLabel, m_nHeight); 
      this.add(m_lblFilename); 

      // Adding a Label 
      nY += m_lblFilename.getHeight() + m_nPadding; 
      m_lblFileGen = new JLabel("Label1"); 
      m_lblFileGen.setBorder(new LineBorder(Color.RED, 2)); 
      m_lblFileGen.setBounds(nX, nY, m_nWidthLabel, 3 * m_nHeight); 
      m_lblFileGen.setForeground(Color.BLUE); 
      this.add(m_lblFileGen); 
     } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
関連する問題