<br>? \ П? разрыв строки в Java - PullRequest
5 голосов
/ 04 августа 2009

У меня есть три JLabels и три JTextAreas. У меня они есть в borderlayout, по центру, но я хочу, чтобы каждая из них была в отдельной строке, этого не происходит, и первые десять результатов поиска в Google по разрыву строки в java не решают проблему. Как я могу сделать простой разрыв строки?

Ответы [ 4 ]

7 голосов
/ 04 августа 2009

Если это приложение Swing, вы должны использовать менеджер компоновки для размещения ваших полей в контейнере.

2 голосов
/ 04 августа 2009

Вы можете использовать менеджеры раскладки, например GridLayout или GridBagLayout . Хотя последний вариант рекомендуется только для кода, сгенерированного генераторами графического интерфейса, я предпочитаю его, потому что он дает мне наибольшую гибкость.

JPanel panel = new JPanel();
GridBagLayout layout = new GridBagLayout();
panel.setLayout(layout);
layout.add(label1, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(area1, new GridBagConstraints(1, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(label2, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(area2, new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(label3, new GridBagConstraints(0, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(area3, new GridBagConstraints(1, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(area1);
panel.add(area2);
panel.add(area3);

Конечно, это выглядит ужасно, но стоит начать.

Вы также можете злоупотреблять BorderLayout :

JPanel panel = new JPanel(new BorderLayout());
JPanel topRow = new JPanel();
panel.add(topRow, BorderLayout.PAGE_START);
topRow.add(label1);
topRow.add(area1);
JPanel middleRowBox = new JPanel(new BorderLayout());
panel.add(middleRowBox, BorderLayout.CENTER);
JPanel middleRow = new JPanel();
middleRowBox.add(middleRow, BorderLayout.PAGE_START);
middleRow.add(label2);
middleRow.add(area2);
JPanel bottomRowBox = new JPanel();
middleRowBox.add(bottomRowBox, BorderLayout.CENTER);
JPanel bottomRow = new JPanel();
bottomRowBox.add(bottomRow, BorderLayout.PAGE_START);
bottomRow.add(label3);
bottomRow.add(area3);
bottomRowBix.add(new JPanel(), BorderLayout.CENTER);
2 голосов
/ 04 августа 2009

Разрыв строки не поможет с размещением объектов Swing; Вам нужно разместить макет по центру JPanel. То есть центром макета вашей границы должен быть один объект Swing, JPanel, и вы должны установить для него стиль, который позволяет вам размещать каждый виджет. GridLayout (6,1) может сделать это.

1 голос
/ 04 августа 2009

Попробуйте использовать GridLayout для начинающих:

panel.setLayout(new GridLayout(0,2));
// the order of added components is important
panel.add(labelA);
panel.add(textAreaA);
panel.add(labelB);
panel.add(textAreaB);
...

Не выглядит слишком красиво, но это заставляет вас начать.

Если вы не установите LayoutManager для новой панели, он будет использовать FlowLayout, который ведет себя подобно HTML-разметке. Но в FlowLayout нет такого понятия, как предполагаемый разрыв строки. Он будет просто помещать компонент за компонентом, пока не достигнет конца доступного пространства, а затем начнет новую строку.
Если вы хотите контролировать свои макеты - не используйте FlowLayout.

Менеджеры по раскладке, с которыми вы, возможно, захотите ознакомиться:

  • BorderLayout - очень хорошо, если вы хотите изменить размер контента
  • GridLayout - простая равная ширина и высота сетки
  • ноль - позволяет использовать setBounds для каждого компонента для получения абсолютных позиций

Есть и другие, но эти три должны позволить вам расположить 95% ваших панелей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...