编写一个用拉长椭圆填充窗口的程序。即使窗口调整大小,椭圆也会触摸窗口边界。
我有以下代码:
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);
}
}
主要课程:
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);
}
}
答案 0 :(得分:6)
:
Ellipse2D.Double ellipse = new Ellipse2D.Double(0,0,getWidth(),getHeight());
我还建议Hovercraft Full Of Eels给出的改变。在这个简单的情况下,它可能不是一个问题,但是当paintComponent方法的复杂性增加时,你真的希望尽可能少地在paintComponent方法中计算。
答案 1 :(得分:2)
不要在paintComponent 中调整组件大小。实际上,不要在此方法中创建对象或执行任何程序逻辑。该方法需要精简,尽可能快,绘图,就是。您必须明白,您无法完全控制何时或甚至是否调用此方法,并且您当然不希望不必要地添加代码,这可能会降低它的速度。
您应该在类的构造函数中创建椭圆。要根据JComponent的大小和大小的更改来调整它的大小,请使用ComponentListener:
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 {
Ellipse2D ellipse = null;
public EllipseComponent {
ellipse = new Ellipse2D.Double(0,0,150,200);
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
// set the size of your ellipse here
// based on the component's width and height
}
});
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(ellipse);
g2.setColor(Color.red);
g2.fill(ellipse);
}
}
警告:代码未运行也未经过测试