【问题标题】:how to do auto-resizing drawings in JPanel?如何在 JPanel 中自动调整图纸大小?
【发布时间】:2019-06-08 12:06:31
【问题描述】:

当用户调整 JFrame 的大小时,在 JPanel 中调整大小的绘图的最简单方法是什么?

我知道我可以使用 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);
    }
}

在调整框架大小时自动调整大小。

【问题讨论】:

    标签: java swing jpanel awt


    【解决方案1】:
    frame.getContentPane().setLayout(new BorderLayout());
    

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

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

    【讨论】:

      【解决方案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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-28
        • 1970-01-01
        • 2015-10-25
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        相关资源
        最近更新 更多