如何在框架内调整大小和paintComponent

1 java swing jcomponent jframe

编写一个用拉长椭圆填充窗口的程序.即使窗口调整大小,椭圆也会触摸窗口边界.

我有以下代码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JComponent;

public class EllipseComponent extends JComponent {
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;

        Ellipse2D.Double ellipse = new Ellipse2D.Double(0,0,150,200);
        g2.draw(ellipse);
        g2.setColor(Color.red);
        g2.fill(ellipse);
    }
}
Run Code Online (Sandbox Code Playgroud)

而主要课程:

import javax.swing.JFrame;

public class EllipseViewer {
   public static void main(String[] args)
   {
       JFrame frame = new JFrame();
       frame.setSize(150, 200);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       EllipseComponent component = new EllipseComponent();
       frame.add(component);

       frame.setVisible(true);
   }
}
Run Code Online (Sandbox Code Playgroud)

Fre*_* LS 6

在您的EllipseComponent中:

Ellipse2D.Double ellipse = new Ellipse2D.Double(0,0,getWidth(),getHeight());

我也推荐Hovercraft Full Of Eels给出的改变.在这个简单的情况下,它可能不是一个问题,但是当paintComponent方法的复杂性增加时,你真的希望在paintComponent方法中尽可能少地计算.