Использование разных менеджеров макетов не работает - PullRequest
1 голос
/ 17 апреля 2019

Я хочу вывести следующий макет enter image description here

но вместо этого мой код выдает следующее, и я не понимаю, почему. Я создаю 4 Jpanels

  1. Заголовок Jpanel для добавления метки -> BorderLayout
  2. JPanel buttonPanel для включения сетки 10x10 -> GridLayout
  3. JPanel textPanel для включения 3 textAreas -> Grid Layout 3x1
  4. JPanel infoPanel для включения 1 TextArea -> BorderLayout

затем я добавляю каждый из 4 JPanel'ов в JFrame как макет границы, но, похоже, это не работает, и я не понимаю, почему. Любая помощь будет принята с благодарностью.

enter image description here

    JFrame frame = new JFrame();
    frame.setSize(200, 200);
    frame.setTitle("Alien Invasion");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel title = new JPanel();
    JLabel label1 = new JLabel("Invaded City");
    title.add(label1);
    frame.add(title, BorderLayout.NORTH);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(10, 10, 2, 2));
    for (int i = 0; i < 100; i++)
        buttonPanel.add(new JButton("Button" + (i + 1)));

    frame.add(buttonPanel, BorderLayout.CENTER);

    JPanel textPanel = new JPanel();
    textPanel.setLayout(new GridLayout(3, 1, 4, 4));


    JTextArea availableUnits = new JTextArea();
    availableUnits.setPreferredSize(new Dimension(200, 200));
    availableUnits.setEditable(false);
    availableUnits.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
    availableUnits.setText("availableUnits\n ");
    availableUnits.setLineWrap(true);
    availableUnits.setWrapStyleWord(true); // words not broken up
    textPanel.add(availableUnits);

    JTextArea respondingUnits = new JTextArea();
    respondingUnits.setPreferredSize(new Dimension(200, 200));
    respondingUnits.setEditable(false);
    respondingUnits.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
    respondingUnits.setText("respondingUnits\n ");
    respondingUnits.setLineWrap(true);
    respondingUnits.setWrapStyleWord(true);
    textPanel.add(respondingUnits);

    JTextArea treatingUnits = new JTextArea();
    treatingUnits.setPreferredSize(new Dimension(200, 200));
    treatingUnits.setEditable(false);
    treatingUnits.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
    treatingUnits.setText("treatingUnits\n ");
    treatingUnits.setLineWrap(true);
    treatingUnits.setWrapStyleWord(true);
    textPanel.add(treatingUnits);

    frame.add(textPanel, BorderLayout.EAST);

    JPanel infoPanel = new JPanel();

    JTextArea informationDisplay = new JTextArea();
    informationDisplay.setPreferredSize(new Dimension(frame.getWidth(), 200));
    informationDisplay.setEditable(false);
    informationDisplay.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
    informationDisplay.setText("informationDisplay\n ");
    informationDisplay.setLineWrap(true);
    informationDisplay.setWrapStyleWord(true);

    infoPanel.add(informationDisplay);
    frame.add(infoPanel, BorderLayout.SOUTH);

    frame.pack();
    frame.setVisible(true);

1 Ответ

0 голосов
/ 17 апреля 2019

Конструктор, который вы используете для некоторых ваших JTextArea:

JTextArea(int rows, int columns)

Итак, вы создаете их с 200 строками, это много. Вместо этого используйте JtextArea ().

...