这是待办事项列表,当用户选择5时,图像应在画布上显示,但是我无法从画布上访问油漆(Graphics g)方法上课,在我的测试人员中。
我在测试仪中遇到了一个错误,该错误说无法从静态上下文中引用非静态方法。在情况5中,可变g也无法解决。
这是画布类
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.");
}
}
}
}
永远不要直接调用油漆(...)方法,秋千将确定何时需要重新粉刷组件。然后,秋千将创建用于绘画方法使用的图形对象。
如果要手动重新粉刷组件,则使用:
someComponent.repaint();
尽管在您的情况下,这是无需这样做的。创建组件后,您实际上必须将画布添加到框架上才能涂漆。
另外,为什么要使用帆布?那是一个AWT组件。使用秋千时,您应该使用jpanel。
实际上,如果您只是想显示图像,则使用jlabel。阅读有关如何使用图标以获取更多信息和工作示例的Swing教程中的部分。