我开发了一个带有椭圆形和按钮的swing应用程序,其输出如下所示,代码如下: -
代码: -
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class AlphaCompositeDemo extends JFrame{
AlphaCompositeDemo()
{
super("AlphaComposite Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
setLayout(new FlowLayout());
setBackground(new Color(0.2f,0.7f,0.1f,0.4f));
comp c=new comp();
add(c);
add(new JButton("Click"));
setVisible(true);
}
public static void main(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable(){public void run(){new AlphaCompositeDemo();}});
}
}
class comp extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2=(Graphics2D)g.create();
g2.setComposite(AlphaComposite.SrcOver);
g2.setColor(Color.RED);
g2.fillOval(50, 50, 220, 120);
}
public Dimension getPreferredSize()
{
return new Dimension(200,200);
}
}
现在我有以下问题:
答案 0 :(得分:6)
您指定的坐标位于您自己的"组件"而不是在"父母"容器
如果更改,可能更容易理解将以下行添加到paintComponent
方法:
g2.drawRect( 0,0, 199, 199 );
矩形与您返回的preferredSize
相匹配。您会看到始终绘制此矩形,并在调整窗口大小时移动。椭圆形停留在矩形内的相同位置。
请注意,您在getPreferredSize
中返回的尺寸小于您尝试绘制的尺寸。这就解释了为什么你只能看到椭圆形的一部分
答案 1 :(得分:2)
Q1
将椭圆放在坐标50,50处。你不要将椭圆对中。
首先尝试使用getWidth()
和getHeight()
获取框架的中心,然后将其用作椭圆中心的值。
类似的东西:
g2d.fillOval(frame.getHeight()/2, frame.getWidth()/2, 200, 200);
Q2
坐标从左上角开始