背景
我在这里撕扯我的头发因为我曾经使用过awt和Swing几次,而且在我最初的图形设置过程中我总是遇到障碍而且我似乎从来没有“当然, this 再一次!我只需要一些东西“-moment。这次我似乎无法获得基本的绘图工作!
问题描述:
我希望在JFrame中绘制一些简单的框(如果需要,可以通过JPanel)。为此,我有一个Sprite extends JComponent
类,目前只绘制简单的几何形状,但最终会使用BufferedImage
或类似的东西。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JComponent;
@SuppressWarnings("serial")
public class Sprite extends JComponent {
private Rectangle rctBounds;
private Color clrFill;
public Sprite(int x, int y, Color color) {
this.rctBounds = new Rectangle(x, y, 100, 100);
this.clrFill = color;
}// Sprite(int,int,Color)
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(clrFill);
g.fillRect(rctBounds.x, rctBounds.y, rctBounds.width, rctBounds.height);
}// paintComponent(Graphics)
}// Sprite.class
这些进入的窗口是通过一个简单的Win extends JFrame
类á:
import javax.swing.JFrame;
public class Win extends JFrame{
public Win(){
setSize(800,600);
setLocation(100,100);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
最后,使用run
的(我相信)JComponent
方法在add()
类的主方法中初始化并连接组件,在{Win
的实例上调用1}}:
import java.awt.Color;
public class run {
public static void main(String[] args) {
Win w = new Win();
Sprite s1 = new Sprite(10,100, Color.BLUE);
Sprite s2 = new Sprite(200,200, Color.RED);
Sprite s3 = new Sprite(300,200, Color.CYAN);
w.add(s1);
w.add(s2);
w.add(s3);
}//main()
}//run.class
期望与现实:
现在,我希望有一个带有三个彩色框的窗口,如this image (all boxes visible)中所示。相反,只会添加要添加的最终JComponent
,as seen here (only cyan box painted)。更令人愤怒的是,尝试编辑JFrame的布局或将JPanel添加为Sprite
的中间容器会导致出现空白窗口。
激怒的辩诉:
我完全失败了!我在这里找到的所有内容都涉及paintComponent(Graphics)
的使用不当(使用paint()
,忘记@Override
,不正确传播图形上下文等)或使用JPanel作为中间容器。所有这一切中最令人愤怒的部分是我之前使用Swing构建了两个正常运行的程序(学校作业),看看那段代码,我不能为我的生活弄清楚我在这里做错了什么!请帮忙!