Java 使用其他类绘制图形
我在下面有两个类:我试图使调用Java 使用其他类绘制图形,java,swing,graphics,Java,Swing,Graphics,我在下面有两个类:我试图使调用FilledFrame可以生成特定的形状。我用下面的一行代码测试了它,但它没有显示在GUI上。我有什么地方做错了吗?我还需要制作一个能够修改某个矩形位置的Card类,因此我需要在main中制作一个图形对象,并将其输入到FilledFrame和我的Card类中吗 import java.awt.Canvas; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; imp
FilledFrame
可以生成特定的形状。我用下面的一行代码测试了它,但它没有显示在GUI上。我有什么地方做错了吗?我还需要制作一个能够修改某个矩形位置的Card
类,因此我需要在main中制作一个图形对象,并将其输入到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);
}
}
主要类别:
我有什么地方做错了吗
很抱歉,但您正在猜测如何进行Swing绘图,虽然这可能适用于简单的Java概念,但它不适用于像Swing图形这样复杂的东西
问题包括:
- 尝试直接在JFrame中绘制——永远不要这样做,而是在JPanel中绘制
- 在组件上调用
,以获取图形资源。这将导致您获得一个不稳定且寿命短的图形对象,这可能导致绘制失败或NullPointerExceptiongetGraphics()
- 未使用适当的绘画方法绘制
- 在绘图方法参数中使用int文字,而不是int变量,使所做的任何绘图都是固定的--您永远无法移动或更改它
- 创建一个扩展JPanel的类,并在该类中绘制
- 在此类的
方法中绘制保护组件(图形g)
- 不要忘了在覆盖中调用super的paintComponent方法,以便GUI清除任何脏像素
- 然后将该JPanel放入需要显示它的JFrame中
- 对于大多数绘图方法参数,请使用int字段(变量)而不是int文本(所谓的“魔术”数字),以便在程序运行时,如果需要,可以更改绘图
- 最重要的是,阅读并学习标准Swing图形教程
- :应该从哪里开始的主教程
- :如何创建Swing GUI
- :Swing图形的入门教程
- :Swing图形高级教程
- 尝试直接在JFrame中绘制——永远不要这样做,而是在JPanel中绘制
- 在组件上调用
,以获取图形资源。这将导致您获得一个不稳定且寿命短的图形对象,这可能导致绘制失败或NullPointerExceptiongetGraphics()
- 未使用适当的绘画方法绘制
- 在绘图方法参数中使用int文字,而不是int变量,使所做的任何绘图都是固定的--您永远无法移动或更改它
- 创建一个扩展JPanel的类,并在该类中绘制
- 在此类的
方法中绘制保护组件(图形g)
- 不要忘了在覆盖中调用super的paintComponent方法,以便GUI清除任何脏像素
- 然后将该JPanel放入需要显示它的JFrame中
- 对于大多数绘图方法参数,请使用int字段(变量)而不是int文本(所谓的“魔术”数字),以便在程序运行时,如果需要,可以更改绘图
- 最重要的是,阅读并学习标准Swing图形教程
- :应该从哪里开始的主教程
- :如何创建Swing GUI
- :Swing图形的入门教程
- :Swing图形高级教程
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();
}
}