【发布时间】:2017-05-15 01:36:15
【问题描述】:
这是一个待办事项列表,当用户选择 5 时,图像应显示在 Canvas 上,但我无法在我的测试器中从 Canvas 类访问 paint(Graphics g) 方法。
我在测试器中收到一个错误,指出无法从静态上下文中引用非静态方法。变量 g,在情况 5 中也无法解析。
这是 Canvas 类
import java.awt.*;
import javax.swing.*;
import java.awt.Canvas;
class Motivation extends JFrame {
{
Motivation a = new Motivation();
a.setVisible(true);
}
Image img = Toolkit.getDefaultToolkit().getImage("motivation.jpg");
public Motivation() {
super("motivation");
getContentPane().add(new Canvas(), BorderLayout.CENTER);
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
class MyCanvas extends Canvas {
public void paint(Graphics g) {
g.drawImage(img, 5, 5, this);
paint(g);
}
}
}
这是测试者
import java.awt.*;
import java.io.*;
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicReference;
public class ToDoListTester {
public static void main(String[] args) throws IOException {
AtomicReference<String> userName = new AtomicReference<String>();
Scanner name = new Scanner(System.in);
System.out.println("\n FINALS TO-DO LIST \n");
System.out.println("Please Enter Your name");
userName.set(name.nextLine());
System.out.println("Hello " + userName + "!");
int select = -1;
while (select != 0) {
select = ToDoList.menu();
switch (select) {
case 1: // case: different form of for/while loop. If the user selects 1, show the To Do list
ToDoList.showList();
break;
case 2: //if the user selects 2, show the To Do list
ToDoList.addTask();
break;
case 3: //if the user selects 3, show the To Do list
ToDoList.removeTask();
break;
case 4:
ToDoList.setTimer(); //if the user selects 4, the countdown timer is started.
break;
case 5:
Motivation motivateMe = new Motivation();
motivateMe.MyCanvas.paint(Graphics g);
case 0: //if the user selects 0, the program is stopped, takes us out of the loop.
break;
default: // different form of else. If the user does something we don't recognize/
System.out.println("Well you're just a little rebel aren't you?");
System.out.println("Try again.");
System.out.println("Select 1 to display your To Do List.");
System.out.println("Select 2 to add a task to your To Do list.");
System.out.println("Select 3 to remove a task from your To Do list.");
System.out.println("Select 4 to set a countdown timer for your task.");
System.out.println("Select 5 for some motivation. ");
System.out.println("Select 0 to exit the program.");
}
}
}
}
【问题讨论】:
-
你能详细说明一下你的错误信息吗?
-
@JoeC 案例 5:Motivation.MyCanvas.paint(g);当我尝试从 MyCanvas 类访问绘制方法时,我得到:“无法从静态上下文引用非静态方法 'paint(java.awt.Graphics)'。”在这一点上,我什至不确定我是否有正确的代码来访问 Main 类中的方法。
-
@JoeC 谢谢,这是一个很好的建议。我从中得到的是,我需要在调用该方法之前创建一个实例。但是,我仍然收到无法解析变量“g”的错误
-
您在
main方法中定义g的位置是什么?