내 JPanel에 2 개의 JButton을 넣고 싶습니다. 그 중 하나는 중앙에 있고 다른 하나는 JPanel의 오른쪽 위에 있습니다. JPanel은 JPanel을 포함하는 JFrame과 동일한 크기입니다. 어떻게 GridBagLayout과 GridBagConstraints를 사용하여 이것을 할 수 있습니까? camickrJPanel 상단에 2 개의 JButton을 배치하는 방법 (하나는 중앙에, 다른 하나는 topright)?
SOL'N 고정public class MyPanel extends JPanel {
static JFrame frame = new JFrame();
public MyPanel() {
JButton btnGame1 = new JButton("Game 1");
JButton btnExitFrame = new JButton("Exit");;
setLayout(new BorderLayout());
JPanel top = new JPanel(new FlowLayout(FlowLayout.RIGHT));
top.add(btnExitFrame);
JPanel center = new JPanel(new GridBagLayout());
center.add(btnGame1, new GridBagConstraints());
add(top, BorderLayout.PAGE_START);
add(center, BorderLayout.CENTER);
}
public static void main(String[] args) {
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyPanel());
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
에 대한
public class MyPanel extends JPanel {
public MyPanel() {
JButton btnGame1 = new JButton("Game 1");
JButton btnExitFrame = new JButton("Exit");
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.PAGE_START;
c.weighty = 1;
c.gridx = 0;
add(btnGame1, c);
c.gridx = 1;
c.anchor = GridBagConstraints.FIRST_LINE_END;
add(btnExitFrame, c);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyPanel());
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
MCVE :
public class MyPanel extends JPanel {
static JFrame frame = new JFrame();
public MyPanel() {
JButton btnGame1 = new JButton("Game 1");
JButton btnExitFrame = new JButton("Exit");;
int nOfCells = 3;
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
for(int i = 0; i < nOfCells; i++){
for(int j = 0; j < nOfCells; j++){
c.gridx = i;
c.gridy = j;
if(i == 1 && j == 0) {
c.anchor = c.PAGE_START;
add(btnGame1, c);
c.anchor = c.CENTER;
}
else if(i == 2 && j == 0) {
c.anchor = c.FIRST_LINE_END;
add(btnExitFrame, c);
c.anchor = c.CENTER;
}
else {
c.fill = c.BOTH;
add(Box.createRigidArea(new Dimension(frame.getWidth()/nOfCells, frame.getHeight()/nOfCells)), c);
c.fill = c.NONE;
}
}
}
}
public static void main(String[] args) {
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.getContentPane().add(new MyPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
nOfCell을 어떻게 정의해야합니까? (프레임에 넣을 버튼이 두 개 있습니다.) – takanuva15
중첩 된 for 루프는 각 방향으로 nOfCells 상자가있는 레이아웃의 격자를 만들었습니다. 선택한 숫자는 프레임을 어떻게 보이게 할 것인지에 달려 있습니다. 정의 된 크기의 nOfCells^2 상자에서 JFrame을 나눠서 상상해보십시오. 어떤 숫자가 더 미학적인지 알 수 있습니다. – Bremsstrahlung
좋아, 나는 3을 3으로 만들 때 찌르다가 펑키했다. MyPanel 생성자를 편집하여 "Game 1"버튼이 JFrame의 상단 중앙에 있고 "Exit"가 상단 오른쪽에 있도록하는 방법을 보여주는 원래 응답 아래에 코드 블록을 붙여 넣을 수 있습니까? – takanuva15