我有一个类Game
,它扩展了JFrame并创建了我想要绘制的窗口。然后我有这个课Die
描绘了我想要的东西。从Game
我可以在setup()
类中调用Die
方法,但是如何调用paint()方法?
public class Die
{
private int xA, yA;
private int dieNumber;
public void setup(int someX, int someY, int someValue) {
dieNumber = someValue;
xA = someX;
yA = someY;
}
public void paint(Graphics pane) {
drawBlank(pane);
if (dieNumber == 1){
drawOne(pane); }
else if (dieNumber == 2){
drawTwo(pane); }
else if (dieNumber == 3){
......
答案 0 :(得分:2)
您可能会在JPanel的protected void paintComponent(Graphics g)
方法覆盖中执行图形处理,并在该方法内部,在您需要绘制的任何Die对象上调用die.paint(g)
。
如,
class DrawingPanel extends JPanel {
private Die die1 = new Die();
private Die die2 = new Die();
//.....
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
die1.paint(g);
die2.paint(g);
}
}
有关更具体和详细的帮助,请尝试创建并发布minimal example program or MCVE,这是一个我们可以运行和编译的小程序,它会告诉我们您的问题。您还需要向我们展示许多相关代码 - 但没有向我们展示太多代码,这是MCVE将提供帮助的地方。
也永远不要在JFrame或Frame的绘画方法中做图形,你也不应该使用Frame或AWT组件。在开始之前,请阅读Swing Graphics教程。关于为什么你不能从设置中调用绘图 - Swing图形是被动的,不能在命令上调用。你应该按我的建议去做,并向绘画管理员建议通过在JPanel上调用repaint()来完成绘画。但是,在您尚未阅读的教程中对此进行了解释。首先,解决这个问题 - 阅读教程。
可以从以下链接找到Swing教程:Swing Info。
答案 1 :(得分:2)
如果你的模具扩展了JPanel并使自定义绘图重写paintComponent,那么这是一个更好的方法:
public class Die extends JPanel
{
private int xA, yA;
private int dieNumber;
public void setup(int someX, int someY, int someValue) {
dieNumber = someValue;
xA = someX;
yA = someY;
}
@Override
public void paintComponent(Graphics pane) {
super.painComponent(pane);
if (dieNumber == 1){
drawOne(pane); }
else if (dieNumber == 2){
drawTwo(pane); }
else if (dieNumber == 3){
......
}