我有下面有两个类:我正在尝试做到这一点,以便调用 FilledFrame
会产生某些形状。我已经用下面的一行对其进行了测试,但它并未显示在GUI上。我在这里做错了吗?我还需要制作一个能够修改某些矩形位置的Card
类,因此我需要在主机中制作图形对象并将其输入FilledFrame
和我的Card
类?
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import javax.swing.*;
public class FilledFrame extends JFrame implements ActionListener {
static int FRAME_WIDTH = 500;
static int FRAME_HEIGHT = 100;
Graphics g = getGraphics();
public FilledFrame () {
g.drawLine(1, 1, 100, 100);
setSize(FRAME_WIDTH, FRAME_HEIGHT);
setVisible(true);
}
private void createComponents() {
...
}
private void createCards() {
...
}
@Override
public void actionPerformed(ActionEvent e) {
}
public static void draw (Graphics g) {
g.fillRect(0, 50, 100, 150);
}
}
主类:
import java.awt.Graphics;
import java.awt.Shape;
import java.awt.geom.Line2D;
import java.awt.geom.Line2D.Float;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.Canvas;
import javax.swing.JComponent;
import javax.swing.JPanel;
public class Main {
public static void main (String args[]) {
FilledFrame frame = new FilledFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
我在这里做错了吗?
很遗憾地说,但是您猜想如何进行摇摆图绘图,尽管这可能与简单的Java概念作用,但它不会像秋千图形那样复杂。
问题包括:
- 试图直接在Jframe中绘制 - 永远不要这样做,而是在Jpanel中绘制。
- 在组件上调用
getGraphics()
以获取图形资源。这将导致您获得一个不稳定且短暂的图形对象,该对象可能导致绘画或NullpoInterExceptions - 不用适当的绘画方法绘制。
- 您在绘图方法参数中使用int文字,而不是int变量,使您 do do do do,固定 - 您永远无法移动或更改它。
相反,我建议您:
- 创建一个延伸jpanel并在该类中绘画的类。
- 在此类的
protected void paintComponent(Graphics g)
方法中绘制。 - 不要忘记在覆盖中调用超级的paintComponent方法,以便您的GUI清理任何肮脏的像素。
- 然后将jpanel放入需要显示的jframe。
- 在大多数绘图方法参数中使用int字段(变量)而不是int文字(所谓的"魔术"数字),以便如果您在程序运行时愿意的话,图纸可以更改。
- 也是最重要的是,阅读和研究标准摇摆图形教程。
资源:
- 真正的大索引:您应该开始的主要教程。
- 使用秋千组件:如何创建摇摆gui的
- 课程:执行自定义绘画:秋千图形的入门教程
- Awt和Swing中的绘画:秋千图形的高级教程