2016-06-24 4 views
1

Я хочу знать, как я могу поместить свой JTextArea, с помощью некоторых кнопок, которые у меня есть в моей программе ... Чтобы показать вам, как я хочу заказать это, я сделал пример в графическом интерфейсе ,Поместите JTextArea в определенном месте

Пример изображения:

enter image description here

В принципе, я хочу, чтобы положить их вниз кнопки, как в примере. Я пытаюсь установить JPanel как flowlayout и добавить JTextArea, но не работает.

ответ

2

Вот пример, как предложено BorderLayout подходит для основной панели.

Чтобы быть ближе к вашему примеру, я добавил границу (пустую границу) на северную панель, а также горизонтальную стойку между кнопками (с использованием BoxLayout для северной панели).

JFrame frame = new JFrame(); 

JPanel contentPanel = new JPanel(); 

contentPanel.setLayout(new BorderLayout()); 

JPanel buttonsPanel = new JPanel(); 
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS)); 
buttonsPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); 

JButton b1 = new JButton("B1"); 
JButton b2 = new JButton("B2"); 

buttonsPanel.add(b1); 
buttonsPanel.add(Box.createHorizontalStrut(5)); 
buttonsPanel.add(b2); 

contentPanel.add(buttonsPanel, BorderLayout.NORTH); 
contentPanel.add(new JTextArea(), BorderLayout.CENTER); 

frame.setContentPane(contentPanel); 
frame.setSize(400, 300); 
frame.setVisible(true); 
+1

Спасибо, Бергер, это мне нужно, я много часов пробовал и не работал, я использовал borderlayout в своем фрейме и помещал Jpanel как flowlayout для добавления моих кнопок, но когда я хочу поставить jtextarea, ничего не работает. Но я пробую с вашим кодом и работает. Спасибо за ваше время и помогите ребятам, я очень ценю. –

+0

Добро пожаловать :) – Berger

+0

С 'new EmptyBorder (10, 10, 10, 10)' вы жестко кодируете объем используемого пространства. Это не переносимо. –

3

Вы можете использовать BorderLayout и добавить JTextArea в центр и иметь макет для панели кнопок как FlowLayout и добавить его на север. Дайте мне знать, если вам нужно hep с кодом.

+1

Спасибо слишком Beniton, я действительно apprecaite вашей помощи и времени. –

+0

Ницца. Очень немногие возвращаются и благодарим. – Beniton

1

Проблема с BorderLayout и большинство других менеджеров компоновки, такие как BoxLayout или GridBagLayout является то, что они устанавливают зазоры между компонентами в пикселях. Это не переносимо, потому что на разных экранах макет будет выглядит по-другому. Если вы создаете свой пользовательский интерфейс на 19-дюймовом мониторе, он не будет выглядеть хорошим на 32-дюймовом мониторе. Теперь мы говорим о приложении Java, где мобильность имеет первостепенное значение.

К счастью, с GroupLayout или MigLayout мы можем создать действительно портативный интерфейс.

package com.zetcode; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import net.miginfocom.swing.MigLayout; 

public class MigLayoutTwoButtonsEx extends JFrame { 

    public MigLayoutTwoButtonsEx() { 

     initUI(); 
    } 

    private void initUI() { 

     JButton btn1 = new JButton("B1"); 
     JButton btn2 = new JButton("B2"); 
     JTextArea area = new JTextArea(15, 28); 
     area.setBorder(BorderFactory.createEtchedBorder()); 

     createLayout(btn1, btn2, area); 

     setTitle("MigLayout example"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private void createLayout(JComponent... arg) { 

     setLayout(new MigLayout("gap 5lp 7lp")); 

     add(arg[0], "split 2"); 
     add(arg[1], "wrap"); 
     add(arg[2], "push, grow, span"); 
     pack(); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(() -> { 
      MigLayoutTwoButtonsEx ex = new MigLayoutTwoButtonsEx(); 
      ex.setVisible(true); 
     }); 
    } 
} 

Приводится пример с менеджером MigLayout.

setLayout(new MigLayout("gap 5lp 7lp")); 

Мы используем логические пиксели для определения наших пробелов.

Скриншот:

Screenshot of the example

+0

Спасибо, Ян, извините за ответ слишком поздно, но я не заходил через некоторое время. –

Смежные вопросы