如何在JPanel中自动调整图纸大小?

时间:2019-01-14 13:35:59

标签: java swing jpanel awt

在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 :(得分:2)

以面板的宽度和高度的比例提供位置和大小。每次调整面板大小时,渲染引擎都会安排对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);
    }
}

答案 1 :(得分:0)

frame.getContentPane().setLayout(new BorderLayout());

在将组件添加到GUI之前插入行。

您应该学习布局管理器,因为它是Java中的独特概念。