GridBagLayout에 구성 요소가 배치되었습니다. JPanel 자체뿐만 아니라 모든 구성 요소 사이에 1px 검정색 선이 필요합니다.스윙 GridBagLayout 구성 요소의 구성 요소간에 1px 경계선을 그립니다.
현재 저는 MatteBorder를 사용하고 있습니다. 상위 구성 요소의 상단 및 왼쪽 가장자리에는 1 픽셀 매트 경계가 있습니다. 각 하위 구성 요소에는 오른쪽 및 아래쪽 가장자리에 1x 크기의 MatteBorder가 있습니다. 수평 및 수직 갭은 GridBagLayout상에서 제로입니다.
주로 부모 경계를 만나는 경우가 종종 있습니다.
이는 하위 구성 요소에 대한 여분의 공간 분포에서 반올림/부동 소수점 부정확성 때문인 것으로 생각됩니다.
이 모양을 얻는 더 좋은 방법이 있습니까?
public class SSBGuiTest extends JDialog {
public SSBGuiTest(Frame owner) {
super(owner);
initComponents();
}
public SSBGuiTest(Dialog owner) {
super(owner);
initComponents();
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
wrapperPanel = new JPanel();
panelWithTopLeftMatteBorder = new JPanel();
panel1 = new JPanel();
label1 = new JLabel();
panel2 = new JPanel();
label2 = new JLabel();
panel3 = new JPanel();
label3 = new JLabel();
//======== this ========
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
//======== wrapperPanel ========
{
wrapperPanel.setBorder(new EmptyBorder(15, 15, 15, 15));
wrapperPanel.setLayout(new BorderLayout());
//======== panelWithTopLeftMatteBorder ========
{
panelWithTopLeftMatteBorder.setBorder(new MatteBorder(1, 1, 0, 0, Color.black));
panelWithTopLeftMatteBorder.setLayout(new GridBagLayout());
((GridBagLayout)panelWithTopLeftMatteBorder.getLayout()).columnWidths = new int[] {0, 0};
((GridBagLayout)panelWithTopLeftMatteBorder.getLayout()).rowHeights = new int[] {0, 0, 0, 0};
((GridBagLayout)panelWithTopLeftMatteBorder.getLayout()).columnWeights = new double[] {1.0, 1.0E-4};
((GridBagLayout)panelWithTopLeftMatteBorder.getLayout()).rowWeights = new double[] {1.0, 1.0, 1.0, 1.0E-4};
//======== panel1 ========
{
panel1.setBorder(new MatteBorder(0, 0, 1, 1, Color.black));
panel1.setLayout(new BorderLayout());
//---- label1 ----
label1.setHorizontalAlignment(SwingConstants.CENTER);
label1.setText("label1");
panel1.add(label1, BorderLayout.CENTER);
}
panelWithTopLeftMatteBorder.add(panel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
//======== panel2 ========
{
panel2.setBorder(new MatteBorder(0, 0, 1, 1, Color.black));
panel2.setLayout(new BorderLayout());
//---- label2 ----
label2.setHorizontalAlignment(SwingConstants.CENTER);
label2.setText("label2");
panel2.add(label2, BorderLayout.CENTER);
}
panelWithTopLeftMatteBorder.add(panel2, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
//======== panel3 ========
{
panel3.setBorder(new MatteBorder(0, 0, 1, 1, Color.black));
panel3.setLayout(new BorderLayout());
//---- label3 ----
label3.setHorizontalAlignment(SwingConstants.CENTER);
label3.setText("label3");
panel3.add(label3, BorderLayout.CENTER);
}
panelWithTopLeftMatteBorder.add(panel3, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
}
wrapperPanel.add(panelWithTopLeftMatteBorder, BorderLayout.CENTER);
}
contentPane.add(wrapperPanel, BorderLayout.CENTER);
pack();
setLocationRelativeTo(getOwner());
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JPanel wrapperPanel;
private JPanel panelWithTopLeftMatteBorder;
private JPanel panel1;
private JLabel label1;
private JPanel panel2;
private JLabel label2;
private JPanel panel3;
private JLabel label3;
// JFormDesigner - End of variables declaration //GEN-END:variables
}
다음과 같습니다 : 첨부
은 간단한 예입니다
칼, 정확한 테두리를 얻으려고합니다. 선 경계선이있는 두 구성 요소가 서로 대치되면 1px 대신 2px 경계가 있습니다. –
검정색 배경에 1px 패딩을 적용하고 흰색 구성 요소를 겹쳐 보았습니다.하지만 위아래 하위 구성 요소는 어떤 이유로 상단과 하단에 두꺼운 테두리가 있습니다. 또한이 구성 요소에서 PDF를 생성 중이며 검정색 배경이 실제 라인 좌표보다 덜 최적 인 PDF 지침이 될 수 있다고 우려하고 있습니다. –
@ Sam Barnum : 설명 주셔서 감사합니다! 나는 당신의 문제를 완전히 해결하지 못했지만 그것을 재현 할 수있었습니다. 다양한 패널에 다른 배경색을 설정함으로써, 내부 구성 요소가 외부 패널을 완전히 채우지 못한다는 것을 보여줄 수있었습니다. 상단, 우측 및 하단에 2px 간격이 있습니다. 어쩌면 당신이 모르고 있거나 보지 않은 인 세트가있을 수 있습니까? –