하나의 패널에는 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이 작동하지 않는 것처럼 보입니다.
작은 샘플 코드를 추가하여 문제를 표시하십시오. 문제에 대한 귀하의 설명이 명확하지 않습니다. – Beowolve
@Beowolve 여기 코드입니다 :) – getXgetY
null 레이아웃을 사용하지 마십시오. Swing은 레이아웃 관리자와 함께 사용하도록 설계되었습니다. 또한 커스텀 페인팅을 할 때마다 레이아웃 매니저가 컴포넌트의 원하는 크기를 알 수 있도록 컴포넌트의 getPreferredSize() 메소드를 오버라이드해야한다. 프레임의 크기를 하드 코딩하지 마십시오. pack() 메서드는 프레임에 추가 된 구성 요소의 기본 크기를 기준으로 프레임의 크기를 지정합니다. – camickr