2017-01-24 25 views
0

私は1つのパネルwhit gridBagLayoutと2つ目のnull gridlayoutを持っています。これをメインパネルに追加すると、メインパネルが1つのパネルに囲まれて消えます。何故ですか?そして、1つのフレームに異なるレイアウト設定の2つのパネルを追加する方法はありますか?ここで異なるレイアウトの2つのパネルを1つのフレームに追加するにはどうすればよいですか?

はコードメイン@Beowolveです:

import java.awt.BorderLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class PrikazGUI { 

    JFrame frejm; 
    JPanel k; 
    JButton b1,b2; 

    public PrikazGUI(){ 
     frejm = new JFrame("Lala"); 
     k = new JPanel(); 

     KvadratPravi p = new KvadratPravi(); 
     JPanel grid = new JPanel(); 
     grid.setLayout(new GridBagLayout()); 
     grid.add(p); 
//  Kvadrat l = new Kvadrat(); 
     JosJedanKvadrat jos = new JosJedanKvadrat(); 
//  k.setLayout(null); 
//  k.setBounds(0, 444,444, 445); 
     k.add(jos); 
     k.add(grid); 
     JPanel main = new JPanel(); 
     main.setLayout(null); 
     k.setBounds(0, 0,1000, 1900); 
     main.setBounds(0, 0,1000, 1900); 
     main.add(k); 



     frejm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frejm.setSize(1900, 1000); 
     frejm.getContentPane().add(main); 
//  frejm.getContentPane().add(k); 
//  frejm.pack(); 
     frejm.setVisible(true); 


    } 


    public static void main(String[] args) { 
     PrikazGUI a = new PrikazGUI(); 

    } 

} 

セカンドクラス:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.JPanel; 

public class KvadratPravi extends JPanel { 

    int sizeH = 60; 
    int sizeW = 60; 
    public GridBagConstraints cst = new GridBagConstraints(); 

    public KvadratPravi() { 
     JPanel j = new JPanel(); 
     j.setLayout(new GridBagLayout()); 
     cst.gridx = 0; 
     cst.gridy = 0; 

     add(j,cst); 

    } 



    @Override 
    protected void paintComponent(Graphics g) { 
     // TODO Auto-generated method stub 
     super.paintComponent(g); 
      g.setColor(Color.PINK); 
      g.drawRect(0, 0, sizeH, sizeW); 
      g.fillRect(0, 0, sizeH, sizeW); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(sizeH,sizeW); 
    } 

} 

サードクラス:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 

import javax.swing.JPanel; 

public class JosJedanKvadrat extends JPanel { 

    int sizeH = 60; 
    int sizeW = 60; 
    int x,y; 


    public JosJedanKvadrat() { 

     setBounds(33, 44,444, 445); 
     JPanel j = new JPanel(); 

     setLayout(null); 

     add(j); 
     addMouseListener(new MouseAdapter() { 
       public void mousePressed(MouseEvent e) { 
       if(!e.isMetaDown()){ 
       x = e.getX(); 
       y = e.getY(); 
       } 
       } 
       }); 
       addMouseMotionListener(new MouseMotionAdapter() { 
       public void mouseDragged(MouseEvent e) { 
       if(!e.isMetaDown()){ 
       Point p = getLocation(); 
       setLocation(p.x + e.getX() - x, 
       p.y + e.getY() - y); 
       } 
       } 
       }); 



    } 



    @Override 
    protected void paintComponent(Graphics g) { 
     // TODO Auto-generated method stub 
     super.paintComponent(g); 
      g.setColor(Color.BLUE); 
      g.drawOval(0, 0, sizeH, sizeW); 


    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(sizeH,sizeW); 
    } 

} 

だから私は第二のクラスは、パネルの中央にあるwhant、 gridBagLayoutを持ち、3番目のクラスIがオブジェクトの周りを移動したいので、クラスにはgridlayoutがありません。メインペインへの2つのパネルは、第2クラスのgridBagLayoutが機能しないようです。

+0

小さなサンプルコードを追加して問題を表示してください。問題のあなたの説明はあまり明確ではありません。 – Beowolve

+0

@Beowolveはここにコードがあります:) – getXgetY

+1

nullレイアウトは使用しないでください。 Swingはレイアウトマネージャで使用するように設計されています。また、カスタムペイントを行うたびに、レイアウトマネージャがコンポーネントの望ましいサイズを知るように、コンポーネントの 'getPreferredSize()'メソッドをオーバーライドする必要があります。フレームのサイズをハードコードしないでください。 pack()メソッドは、フレームに追加されたコンポーネントの推奨サイズに基づいてフレームのサイズを設定します。 – camickr

答えて

0

JPanelを現在JFrameに追加しています。

JFrame f = new JFrame(); 

このフレームは、デフォルトでBorderLayoutを使用します。したがって、f.add(new Panel());を複数回呼び出すと、このレイアウトのcenterエリアにはJComponentという1つしか表示されないため、最後のものが表示されます。別のレイアウトを使用する必要があります。

+1

'別のレイアウトを使用する必要があります.' - または、2番目のコンポーネントをBorderLayoutの別の領域に追加します。たとえば、 'add(component、BorderLayout.PAGE_END)'のようにします。 – camickr

+0

@camickr私はこれらのパネルの内容がわからないので、他のレイアウトを使用することをお勧めしました。また、境界線のコンテンツを設定するための境界線のレイアウト(メニュー、フッター、ヘッダー)を見たいと思っています。しかし、私はそれを言及すべきである。まあもう問題じゃない – AxelH

関連する問題