#java #swing #user-interface #jframe #jpanel
Вопрос:
Поэтому я пытаюсь создать простую программу, которая выводит прямоугольник, но у меня возникла эта проблема, и я не знаю, как ее исправить. Вот мой код:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
public class GraphicsEditor extends JPanel{
public void drawShape(Graphics g) {
super.drawShape(g);
g.setColor(Color.BLUE);
g.drawRect(100, 100, 120, 150);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
GraphicsEditor ga = new GraphicsEditor();
frame.setSize(1280, 720);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(ga);
}
}
Ошибка возникает, когда я пытаюсь добавить super
сюда:
public void drawShape(Graphics g) {
super.drawShape(g);
g.setColor(Color.BLUE);
g.drawRect(100, 100, 120, 150);
}
Ответ №1:
У A JPanel
нет drawShape(Graphics)
метода, поэтому вызов метода «супер» не имеет смысла. Когда вы думаете, что переопределяете метод, обязательно добавьте @Override
обозначения, чтобы получить предупреждение компилятора, когда метод неправильно написан, использует неправильные аргументы или просто полностью отсутствует (как в данном случае).
Правильный способ сделать это-переопределить paintComponent
метод, вызвать (существующий) суперметод, а затем немедленно вызвать drawShape
метод с Graphics
экземпляром, предоставленным paintComponent
методу.
Это результат, когда графический интерфейс сокращается:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
public class GraphicsEditor extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
drawShape(g);
}
// @Override // does NOT override an existing method!
public void drawShape(Graphics g) {
//super.drawShape(g);
g.setColor(Color.BLUE);
g.drawRect(100, 100, 120, 150);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
GraphicsEditor ga = new GraphicsEditor();
frame.setSize(280, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(ga);
}
}