비교적 작은 규모의 텍스트 기반 게임을 JFrame
안에 만들려고합니다. 나는 이것을 JFrame
을 일정한 크기로 유지할 계획이므로 setResizable(false)
을 호출했습니다.JFrame의 boxed JScrollPane 사이의 여분의 공간
내 목표는 다소 콘솔처럼 행동 또는 명령 프롬프트 텍스트 I/O 기능을 만드는 것이 었습니다, 그래서 JScollPane
내부에 두 개의 JTextArea
의 각이하고 나는 Box
, 하나 둘 추가했습니다 다른 쪽 위에. 이 구성 요소가 일정한 크기를 유지하기를 원했기 때문에 setPreferredSize()
및 setMaximumSize()
을 적절한 크기로 호출했습니다.
그러나이 상자 중 두 개를 JFrame
에 추가하면 가로 간격이 분리됩니다. 간격은 구성 요소의 오른쪽 경계에 부착 된 것으로 보입니다. 이 동작에 대한 첨부 된 그림을 참조하십시오.
).
콘텐츠 창에서 FlowLayout
을 사용 중입니다. hGap을 0으로 설정했지만 추가 한 구성 요소 사이에 여전히 간격이 있으며 이유를 파악할 수 없습니다.
JFrame
자체 또는 레이아웃 관리자에서 문제가 없는지 확인하기 위해 버튼 사이에 간격이 없다는 것을 설명하는 버튼이있는 상자 두 개를 추가했습니다.
가능한 한 틈을 없애거나 적어도 그 원인을 파악하고 싶습니다. 이 시점에서 다른 문제가 무엇인지 알 수는 없으며 조언을 주시면 감사하겠습니다.
편집 : 내 문제를 보여주기 위해이 클래스에 코드의
내가 발췌 한 관련 비트 : : 여기처럼 보이도록이 데모 클래스를 원하는 무엇의 사진입니다
import javax.swing.*;
import java.awt.*;
public class Demo extends JFrame {
public Demo() {
super("Demo");
setSize(400, 400);
setResizable(false);
int Y_AXIS = BoxLayout.Y_AXIS;
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
getContentPane().setBackground(Color.RED);
Box boxA = new Box(Y_AXIS);
boxA.add(createComponent("output"));
boxA.add(createComponent("input"));
this.add(boxA);
Box boxB = new Box(Y_AXIS);
boxB.add(createComponent("output"));
boxB.add(createComponent("input"));
this.add(boxB);
Box boxC = new Box(Y_AXIS);
boxC.add(new JButton("Button"));
boxC.add(new JButton("Button"));
this.add(boxC);
Box boxD = new Box(Y_AXIS);
boxD.add(new JButton("Button"));
boxD.add(new JButton("Button"));
this.add(boxD);
this.setVisible(true);
}
private JScrollPane createComponent(String initial) {
JTextArea ta = new JTextArea(3, 10);
ta.setText(initial);
JScrollPane sp = new JScrollPane(ta);
Dimension pref = new Dimension(100, 100);
sp.setPreferredSize(pref);
sp.setMaximumSize(pref);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
return sp;
}
public static void main(String[] args) {
Demo d = new Demo();
}
}
1) 공백은 'FlowLayout'이 아닌 'Box'에서 오는 것 같습니다. 2) ASCII 아트 또는 GUI의 * 의도 된 레이아웃의 간단한 그림을 제공하십시오. –
@AndrewThompson 팁 주셔서 감사! 당신이 제안한 것처럼 나는 GUI가 어떻게 보이길 원하는지 그림으로 포스트를 수정했다. 기본적으로 나는 그 차이를 없애고 싶다. Box가 나타날 수 있다는 것에 대해 알고 있습니까? 나는 당황 스럽다 - JButtons의 쌍은 또한 상자에 있지만 틈새를 보이지 않는다. – kattusite
아마도 4 개의 패널을 사용할 것입니다. 1) 텍스트 영역을위한 2x2'GridLayout'. 2) 버튼을위한 2x2'GridLayout'. 3) 버튼을 포함하는 패널을 중앙에 배치하기위한'GridBagLayout'. 4) 텍스트 영역 패널 ('LINE_START')의'BorderLayout'과'GridBagLayout' ('LINE_END')을 사용한 패널. - 선호하는 것을 망치지 마십시오. minimu 또는 최대 크기. 테두리 레이아웃이있는 패널에'EmptyBorder '를 추가 한 다음 프레임을 보여주기 직전에 포장하십시오. –