到目前为止,这本书基本上是清晰一致的,有时我不得不回去重读,但在这个例子中,我真的被卡住了,无论我重读多少,我都不明白。要么是书中遗漏了什么,要么是我遗漏了整个要点。所以,如果你能帮我澄清一下,这让我非常困扰,我不想在没有得到正确答案的情况下继续读这本书。
import java.awt.*;
import javax.swing.*;
public class MyDrawPanel extends JPanel {
public static void main(String[] args) {
MyDrawPanel pan = new MyDrawPanel();
pan.go();
}
private static final long serialVersionUID = 2; // this was not mentioned in the book, but i had to put it to get rid of the warning the compiler gives without it (i googled it)
public void go() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
}
// In the book it's mentioned that you never call this method yourself (i don't quite get it how that works...)
public void paintComponent(Graphics g) {
g.setColor(Color.orange);
g.fillRect(20,50,100,100);
}
}
上面的代码编译并运行得很好,但什么也没发生。
我试着实例化一个图形对象,然后在抽象的图形类中玩。。
非常感谢。
编辑:我有这本书的第2版,所以如果你也有它,你可以翻到第12章第364页(我绘制JFrame的代码来自前面的示例-我认为油漆组件()方法示例只是添加到前面的示例中。
您应该始终调用super.paintComponent(g);
此外,您应该选择不同的设计来创建框架和面板。我个人会用这个:
public class MyGui extends JFrame {
public MyGui() {
DrawPanel myDrawPanel = new DrawPanel();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(myDrawPanel);
this.pack();
this.setVisible(true);
}
}
public class MyDrawPanel extends JPanel {
public MyDrawPanel() {
this.setPreferredSize(new Dimension(300, 300));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.orange);
g.fillRect(20,50,100,100);
}
}
了解super.paintComponent(g)
做什么的有用答案:super.paintComponent(g)做什么?
主要问题是您从未将MyDrawBoard
的实例添加到您在go()
方法中创建的框架中,因此它仍然为空。
解决这个问题的一种方法是在go方法中显式地添加MyDrawPanel的当前(this)实例
public void go() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.add(this); // <-- add this line,
// you can also use frame.setContentPane(this)
frame.setVisible(true);
}
我已经阅读了很多关于绘制Graphics2D组件和添加到JPanel/JFrame的教程,但我无法找到如何简单地将多个这些组件添加到一个JPanel中。我下面的代码只添加了1个组件(行),我不知道为什么不能添加更多。 我到底做错了什么? 期望行为:应有 3 条红线。 我的整个代码:
问题内容: 我正在尝试使Java 2D图形“ hello world”运行起来,并发现它异常困难(即,我正在搜索“ java hello world example”的变体,然后变成空白)。有人能帮我举一个最小的世界范例吗? 编辑 不过,这是一个不错的起点,“ Java教程:执行自定义绘画” 。 问题答案: 要在Swing中绘制矩形,您应该: 首先,永远不要直接在JFrame或其他顶级窗口中绘制。
所以我是新的Java图形,我正在创建一个程序,将显示一个矩形。但当我运行我的程序时,它只显示为一个小盒子,而不是矩形。我真的不知道为什么会这样。 下面是我的代码: 这是我的矩形类: 这是我的形状界面:
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 我想用Java绘制图形(节点和边)。但是,由于我不知道该怎么做,因此在开始之前我想寻求一些建议。 我应该怎么做? 使用Graphics2D包,对吗? 节点的标签怎么样?我应该使用诸如drawString之类的东西并手动处理所有“
导语 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice和QPaintEngine这三个类。其中QPainter用来执行绘图操作;QPaintDevice提供绘图设备,它是一个二维空间的抽象,可以使用QPainter在其上进行绘制;QPaintEngine提供了一些接口,可以用于QPainter在不同的设备上进行绘制
使用matplotlib时,我可以使用{importmatplotlib.pyplotas plt}因为我使用Tkinter,所以我也会使用PicreCanvasTkAgg来做同样的事情 有人能帮我在如何实现matplotlib的停顿效果在菲格勒CanvasTkAgg。