Я пытаюсь создать относительно мелкомасштабную текстовую игру внутри JFrame
. Я планирую держать этот JFrame
постоянным размером, поэтому я позвонил setResizable(false)
.Дополнительное пространство между коробками JScrollPanes в JFrame
Моя цель состояла в том, чтобы сделать функцию текст ввода/вывода, который несколько действовал как консоли или из командной строки, так что у меня есть два JTextArea
с, каждый внутри JScollPane
, а затем я добавил их обоих к Box
, один поверх другого. Я хотел, чтобы эти компоненты сохраняли постоянный размер, поэтому я позвонил setPreferredSize()
и setMaximumSize()
с соответствующими размерами.
Однако, когда я добавляю два из этих ящиков в JFrame
, между ними есть горизонтальный зазор. Кажется, что зазор связан с правой границей компонента. См. Прилагаемое изображение этого поведения:
).
Я использую FlowLayout
в области содержимого, где hGap установлен на 0, и все же между компонентами, которые я добавил, все еще существует разрыв, и я не могу понять, почему.
Чтобы убедиться, что это не проблема с самим JFrame
или с его менеджером макетов, я также добавил два блока, содержащие кнопки, чтобы проиллюстрировать, что у них нет разрыва между ними.
Если возможно, я хотел бы удалить пробелы или, по крайней мере, определить, что их вызывает. На данный момент я понятия не имею, что еще может вызвать проблему, и я был бы признателен за любые советы.
EDIT: Вот картина того, что я хотел бы это демонстрационный класса выглядеть следующим образом:
Я выборки статьи соответствующих бит коды в этот класс, чтобы продемонстрировать мою проблему:
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) Пространства, кажется, поступают из 'Box', а не из' FlowLayout' .. 2) Предоставляют ASCII-искусство или простой рисунок * предназначенного макета GUI. –
@AndrewThompson Спасибо за подсказку! Как вы предположили, я пересмотрел сообщение с изображением того, что мне хотелось бы, чтобы графический интерфейс выглядел. В принципе, я просто хочу удалить пробел. Есть ли у вас какие-либо представления о том, что может произойти с коробкой? Я озадачен - пары JButtons также находятся в коробках, но не имеют пробелов. – kattusite
Я бы, вероятно, использовал для этого четыре панели. 1) 2x2 'GridLayout' для текстовых областей. 2) 2x2 'GridLayout' для кнопок. 3) «GridBagLayout» для центрирования панели, содержащей кнопки. 4) «BorderLayout» для панели текстовой области ('LINE_START') и панели с использованием' GridBagLayout' ('LINE_END'). - Не путайте с предпочтительным. минимальный или максимальный размер всего. Добавьте «EmptyBorder» к панели с макетом рамки, затем упакуйте рамку перед ее показом. –