죄송합니다. 아직 이해가되지 않습니다. 이것은 대답의 시도가 아니라 질문의 연속입니다.
나는 GridBagLayout을 알아낼 수 없었습니다. 그것은 나에게 설명되지 않은 구성 요소의 예이다. 나는 그 제약들 중 많은 것들에 대한 설명을 보지 못했다. 그러나 내가하고 싶은 것은 예제처럼 보이지 않으며, 시행 착오를 통해 그것으로 미래를 내다 보며, 내가 원하는 것을하는 조합에서 일어날 수 있기를 바랍니다. 프로그램 할 수있는 방법.
편집 : 이제 계속 질문에 대한 답변입니다. 일반적인 시행 착오를 통해 저는 누락 된 원리를 발견하고 그것을 여기에 제공함으로써 누군가가 공식 문서를 찾는 동안 길을 잃을 수 있다고 생각합니다.
"GridBagLayout 사용 방법"에는 다음이 포함되어 있습니다.GridBagLayout은 구성 요소를 모눈의 사각형 (셀)에 배치 한 다음 구성 요소의 기본 크기를 사용하여 셀의 크기를 결정합니다.
그리드의 의미를 놓치기 쉽습니다. 해당 열/행의 모든 구성 요소의 기본 크기를 사용하여 한 행의 높이를 계산할 수 있습니다. 실현시 GBL을 생각하면 열에 표시 될 모든 구성 요소를 살펴보고, 크기 너비 및 첫 번째 열 너비를 만드는 등
아래 코드는 GridBagLayout 패널을 'x', 'y', 'width'및 ' 패널 안의 구성 요소의 'height'속성을 사용하면 GBL은 분명히 tha 티.
그래서 내 프로그램은 내가 예상 한대로 작동하지 않습니다. 나는 구성 요소의 선호 크기를 설정하면서 프로그램을 만들지 말아야한다고 주장하는 사람들의 분노를 불러 일으킬 수 있었다. 해결해야 할 문제가 있다면 사실 그렇게하지 않을 것입니다.
OP에 결정적인 것을 제안 할 수는 없습니다. 이 연습을 마친 후에도 구성 요소 레이아웃을 위해 GroupLayout (내 자신의 추가 기능 포함)을 선호합니다. 원래의 문제를 해결할 수있는 좋은 방법을 선택하려면 구성 요소의 크기가 어떻게 선택되고 OP에 필요한 유연성이 더 필요한지 알아야합니다. 여기
가 무엇
내가 작동하지 않습니다있어 :
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
/**
* trying to do this:
* <pre>
* +----------------+----------------+--------+
* | | | |
* | tile 1 | tile 3 | |
* | | | |
* +----------------+----------------+ tile 5 |
* | | | |
* | | | |
* | | | |
* | tile 2 +----------------+--------+-------+
* | | | |
* | | tile 4 | tile 6 |
* | | | |
* |----------------+----------------+----------------+
*
* </pre>
*/
public class Tiles extends JFrame
{
private static final long serialVersionUID = 1L;
private GridBagConstraints constraints = new GridBagConstraints();
private Border lineBorder = BorderFactory.createLineBorder(Color.black);
JPanel gblPanel = new JPanel(new GridBagLayout());
public static void main(String[] args)
{
Tiles tiles = new Tiles();
tiles.go();
}
public void go()
{
createUI();
setVisible(true);
}
private void createUI()
{
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addLabelToGblPanel("1", 2, 1, 0, 0); // label, width, height, x position, y position
addLabelToGblPanel("3", 2, 1, 2, 0);
addLabelToGblPanel("5", 1, 2, 4, 0);
addLabelToGblPanel("2", 2, 2, 0, 1);
addLabelToGblPanel("4", 2, 1, 2, 2);
addLabelToGblPanel("6", 2, 1, 4, 2);
getContentPane().add(gblPanel);
pack();
}
private void addLabelToGblPanel(String num, int width, int height, int x, int y)
{
String numString = "Tile " + num;
JLabel tile = new JLabel(numString, SwingConstants.CENTER);
tile.setBorder(lineBorder);
constraints.ipadx = 25;
constraints.ipady = 25;
constraints.gridwidth = width;
constraints.gridheight = height;
constraints.gridx = x;
constraints.gridy = y;
// constraints.fill = GridBagConstraints.BOTH;
// constraints.weightx = 0.5;
// constraints.weighty = 0.5;
gblPanel.add(tile, constraints);
}
}
분명히
뭔가 잘못있어; 제가 가지고있는 것은 3x2 격자로 나타납니다. 크기와 위치는 아무런 차이가 없습니다. 제약 조건이 어떻게 작동하는지 설명 할 수있는 사람이 있습니까?
이 손으로 GroupLayout을 수행하는 방법을 배울 저를 몰고 것입니다 ...
'GridBagLayout'이 할 수 있습니다 (행 길이와 열 길이를 지원합니다). 나는'MigLayout'도 그것을 할 수 있어야한다고 생각한다. –
그러나'GridBagLayout'으로 어떻게 할 것인가? 'GridBagConstraints weightx'와'weighty'를 사용했으나 위와 같이 출력합니다. MigLayout도 살펴 보았지만 구성 요소를 하나씩 추가하는 것처럼 보이지만, 제 경우에는 구성 요소를 그리드 내의 "임의"위치에 추가해야합니다. – user2346363
코드를 게시하면 살펴볼 것입니다. 주석에 코드를 설명하는 것만으로는 충분하지 않습니다. –