2017-01-24 4 views
0

하나의 패널에는 gridBagLayout이 있고 두 번째 패널에는 null gridlayout이 있습니다. 메인 패널에 추가하면 프레임 하나의 패널에 메인 패널이 사라집니다. 왜 그런가요? 그리고 하나의 프레임에 다른 레이아웃 설정이 적용된 두 개의 패널을 추가하는 방법은 무엇입니까?한 프레임에 다른 레이아웃의 두 패널을 추가하는 방법은 무엇입니까?

여기 코드의 주요 @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(); 

    } 

} 

2 등석 :

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 클래스, 그래서 그나마 해달라고 gridlayout ... 내가 메인 패널의 두 패널은 두 번째 클래스 인 gridBagLayout이 작동하지 않는 것처럼 보입니다.

+0

작은 샘플 코드를 추가하여 문제를 표시하십시오. 문제에 대한 귀하의 설명이 명확하지 않습니다. – Beowolve

+0

@Beowolve 여기 코드입니다 :) – getXgetY

+1

null 레이아웃을 사용하지 마십시오. Swing은 레이아웃 관리자와 함께 사용하도록 설계되었습니다. 또한 커스텀 페인팅을 할 때마다 레이아웃 매니저가 컴포넌트의 원하는 크기를 알 수 있도록 컴포넌트의 getPreferredSize() 메소드를 오버라이드해야한다. 프레임의 크기를 하드 코딩하지 마십시오. pack() 메서드는 프레임에 추가 된 구성 요소의 기본 크기를 기준으로 프레임의 크기를 지정합니다. – camickr

답변

0

현재 JFrameJPanel 2 개를 추가 중입니다.

JFrame f = new JFrame(); 

이 프레임은 기본적으로 BorderLayout을 사용합니다. 따라서 f.add(new Panel()); 번을 여러 번 호출하면이 레이아웃의 center 영역에만 JComponent이 표시 될 수 있기 때문에 마지막 것만 볼 수 있습니다. 다른 레이아웃을 사용해야합니다.

+1

'다른 레이아웃을 사용해야합니다. '- 또는 두 번째 구성 요소를 BorderLayout의 다른 영역에 추가하십시오. 예를 들어'add (component, BorderLayout.PAGE_END)' – camickr

+0

@camickr 나는 그 패널의 내용을 잘 모르기 때문에 다른 레이아웃을 사용하는 것을 선호했다. 테두리 내용을 설정하는 테두리 레이아웃 : 메뉴, 바닥 글, 머리글을 선호합니다. 그러나 나는 그것을 언급해야했다. 더 이상별로 중요하지 않습니다. – AxelH

관련 문제