Как добавить панель GUI и DrawPanel в один кадр? - PullRequest
0 голосов
/ 18 июня 2020

Я хочу, чтобы здесь были добавлены две панели в одном кадре, я хочу, чтобы несколько кнопок и текстовых полей с правой стороны отредактировали класс панели рисования, но я не могу понять, как добавить компоненты GUI в panel2. Всякий раз, когда я пытаюсь добавить GUI компонентов в panel2, он просто не работает, как обычно, и я не понимаю, почему.

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("WaferMap");
        frame.setSize(1286, 829);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setVisible(true);
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new BorderLayout());
        DrawingPanel panel1 = new DrawingPanel();
        JPanel panel2 = new JPanel();

        frame.add(panel1, BorderLayout.WEST);
        panel1.setPreferredSize(new Dimension(1080, 800));

        final JButton button = new JButton();

        panel2.add(button, BorderLayout.EAST);
        button.setBounds(50,50,100,50);
        frame.add(panel2, BorderLayout.EAST);
        panel2.setPreferredSize(new Dimension(200, 800));
    }
}

Это основной, у меня есть другой класс называется drawingPanel с paintComponent в нем.

1 Ответ

0 голосов
/ 18 июня 2020
  1. Не используйте setPreferredSize (). Задача менеджера по расположению - вычислить предпочтительный размер панели на основе правил менеджера по расположению и предпочтительного размера компонентов, добавляемых к панели.

  2. Don ' t используйте setSize (). Вместо этого используйте pack (). Размер кадра будет зависеть от предпочтительного размера всех компонентов, добавленных к кадру.

  3. Реальная проблема в том, что по умолчанию размер компонента (0. 0), поэтому расписывать нечего. Задача менеджера по расположению - указать компоненту размер / расположение. Проблема в том, что вы сделали фрейм видимым до того, как добавили компоненты на панель, поэтому диспетчер компоновки никогда не запускался. Итак, решение состоит в том, что операторы pack() и setVisible(true) должны вызываться ПОСЛЕ того, как все компоненты были добавлены во фрейм.

Обратите внимание, что в руководстве также есть раздел по Custom Painting который вам следует прочитать, чтобы правильно выполнить рисунок, чтобы убедиться, что ваш DrawingPanel имеет предпочтительный размер.

...