Как сделать автоматическое изменение размеров чертежей в JPanel? - PullRequest
0 голосов
/ 14 января 2019

Какой самый простой способ иметь рисунок в JPanel, который изменяет размеры всякий раз, когда пользователь изменяет размер JFrame?

Я знаю, что могу автоматически изменить размер панели с помощью BorderLayout, но размеры чертежей в этом случае не изменяются. Я новичок в программировании на Java и GUI, и, вероятно, существует множество решений.

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

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;

public class DrawRect extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        g.drawRect(20, 20, 100, 100);
    }


    public static void main(String[] args) {
        JFrame frame = new JFrame();
        DrawRect panel = new DrawRect();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(200, 200));
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}

автоматическое изменение размера при изменении размера кадра.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Укажите положения и размеры в пропорции к ширине и высоте панели. Всякий раз, когда размер панели изменяется, механизм визуализации будет планировать вызов метода paintComponent(), и прямоугольник будет нарисован пропорционально. Е.Г.

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;

public class DrawRect extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        int w = getWidth();
        int h = getHeight();
        g.drawRect(w/10, h/10, w/2, h/2);
    }

    /* A custom component should give the layout manager hints as to
    its preferred size. */
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(200,200);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        DrawRect panel = new DrawRect();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}
0 голосов
/ 14 января 2019
frame.getContentPane().setLayout(new BorderLayout());

Вставьте строку перед добавлением компонента в графический интерфейс.

Вы должны изучить менеджеров по расположению, так как это уникальная концепция в Java.

...