【问题标题】:Need help in understanding the swing code在理解摇摆代码方面需要帮助
【发布时间】:2012-10-16 20:57:42
【问题描述】:

我开发了一个带有椭圆形和一个按钮的摇摆应用程序,其输出如下所示,代码如下:-

代码:-

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);
}
}

现在我有以下问题:

  1. 如果我已经为椭圆指定了 x,y 坐标,那么为什么在调整窗口大小时它会从原来的位置移动? (虽然我知道由于 FlowLayout 它在中心对齐,但它违反了它必须固定的属性,因为我已经指定了坐标 x,y)。
  2. 其次,如果输出很明显(我没有预料到),那么我指定的 x,y 坐标是 w.r.t 哪个角?

【问题讨论】:

标签: java swing graphics2d paintcomponent translucency


【解决方案1】:

您指定的坐标在您自己的“组件”内,而不是在“父”容器内。

如果您更改将以下行添加到paintComponent 方法,可能更容易理解:

g2.drawRect( 0,0, 199, 199 );

矩形与您返回的preferredSize 匹配。您会看到此矩形始终被绘制,并在调整窗口大小时移动。椭圆在矩形内保持相同的相对位置。

请注意,您在 getPreferredSize 中返回的大小小于您尝试绘制的实际大小。这就解释了为什么你只能看到椭圆的一部分

【讨论】:

  • :很好解释,特别是与矩形的比较。Thanx
【解决方案2】:

Q1 将您的椭圆放在坐标 50、50 处。您没有将椭圆居中。

来自javadoc

尝试首先使用getWidth()getHeight() 获取框架的中心,然后将其用作椭圆中心的值。

类似:

g2d.fillOval(frame.getHeight()/2, frame.getWidth()/2, 200, 200);

Q2坐标从左上角开始

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多