Разверните JTextArea в GridBagLayout - PullRequest
0 голосов
/ 08 апреля 2019

Я никогда не использовал GridBagLayout, но я уверен, что это может быть что-то еще.В настоящее время я пытаюсь добавить TextArea, чтобы он работал в качестве окна видового окна консоли для любого выполняемого кода.В его нынешнем виде TextArea является крошечным и фактически не может видеть никакого текста.

Я попытался обратиться к этой странице за одним из предложений, но мне все еще не удалось правильно отобразить JTextArea.

Код вставлен ниже, дайте мне знать, если вам нужно что-нибудь еще.Я также приложил дополнительную картину, показывающую, что он в настоящее время делает. Редактировать: setup ();является пустым телом.

@SuppressWarnings("serial")
public abstract class MainComponent extends JPanel {

protected String componentName = "DEMO";

private JLabel title;
private GridBagConstraints gbc;
private Insets spacing; 
private Font buttonFont;

/*
 * Redirection manipulation for the project.
 */
private JTextArea localConsole;

public MainComponent(Dimension dim) {

    setup();

    /* Set main body */
    setLayout(new GridBagLayout());
    gbc = new GridBagConstraints();
    spacing = new Insets(100,5,100,5);
    buttonFont = new Font("Consolas", Font.ITALIC, 22);

    /* Set title */
    title = new JLabel(componentName);
    title.setFont(new Font("Consolas", Font.BOLD, 48));
    gbc.fill = GridBagConstraints.CENTER;
    gbc.gridx = 1;
    gbc.gridy = 0;
    add(title, gbc);

    JButton run = new JButton("Run Project");
    run.setFont(buttonFont);
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = spacing;
    gbc.gridx = 0;
    gbc.gridy = 2;
    add(run, gbc);

    JButton open = new JButton("Open Codebase");
    open.setFont(buttonFont);
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = spacing;
    gbc.gridx = 1;
    gbc.gridy = 2;
    add(open, gbc);

    JButton exit = new JButton("Exit Program");
    exit.setFont(buttonFont);
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = spacing;
    gbc.gridx = 2;
    gbc.gridy = 2;
    add(exit, gbc);

    /* Setup console for output */
    localConsole = new JTextArea();
    DefaultCaret caret = (DefaultCaret) localConsole.getCaret();
    caret.setUpdatePolicy(2);
    localConsole.setEditable(false);
    localConsole.setFont(new Font("Consolas", Font.PLAIN, 16));
    localConsole.setWrapStyleWord(true);
    localConsole.setSize(new Dimension(400, 200));

    JScrollPane scrollPane = new JScrollPane(localConsole);
    scrollPane.setVerticalScrollBarPolicy(22);
    scrollPane.setSize(new Dimension(400, 200));
    gbc.fill = GridBagConstraints.CENTER;
    gbc.insets = new Insets(200, 0, 20, 0);
    gbc.gridx = 1;
    gbc.gridy = 3;
    gbc.gridwidth = 5;
    gbc.gridheight = 2;
    add(scrollPane, gbc);

}

Empty TextArea

1 Ответ

1 голос
/ 08 апреля 2019

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

Итак, что мы видим, это попытка:

  1. показать 3 кнопки сверху
  2. заполнить оставшуюся область внизу текстовой областью

Так что я бы посоветовал вам никогда не использовать один менеджер раскладки. Во многих случаях сочетание менеджеров компоновки проще.

Итак, я бы предложил вам:

  1. использовать BorderLayout в качестве основного макета.
  2. создать панель для кнопки и добавить к Page_START BorderLayout
  3. добавить панель прокрутки к CENTER BorderLayout.

Итак, основной код будет:

setLayout( new BorderLayout() );

JPanel buttonsPanel = new JPanel();
buttonsPanel.add(run);
buttonsPane.add((open);
buttonsPanel.add(exit);
add(buttonsPanel, BorderLayout.PAGE_START);

JTextArea textArea = new JTextArea(10, 30); // give text area a default preferred size
add(new JScrollPane(textArea), BorderLayout.CENTER);

Гораздо проще и меньше кода, чем пытаться использовать GridBagLayout.

Однако, если вы хотите практиковать использование GridBagLayout, сначала прочитайте учебник Swing по Как использовать GridBagLayout для получения дополнительной информации об ограничениях.

Базовый код может выглядеть примерно так:

gbc.gridx = 0;
gbc.gridy = 0;
add(run, gbc);

gbc.gridx = 1;
gbc.gridy = 0;
add(open, gbc);

gbc.gridx = 2;
gbc.gridy = 0;
add(exit, gbc);

localConsole = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(localConsole);

gbc.fill = GridBagConstraints.CENTER;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 3; // try this with 1 and 2 to see the difference.
add(scrollPane, gbc);

То есть вы не можете просто случайным образом использовать значения gridx / gridy / gridwidth / gridheight.

Компоненты должны отображаться в сетке. Вы не можете оставить пробелы в сетке.

Так что, если вы хотите, чтобы кнопки располагались в строке, вам нужно последовательно увеличивать gridx для того же значения gridy.

Если вы хотите, чтобы текстовая область под кнопками увеличивала сетку последовательно и начинала с нового значения gridx.

...