Ваш метод рисования является методом класса Main2, но вы никогда не добавляете экземпляр Main2 в JFrame или любой компонент, который входит в JFrame, и поэтому экземпляр Main2 никогда не будет отображаться, а менеджер рисования Swing будет никогда не вызывайте метод рисования.
Для начала, избавьтесь от этой переменной, panel = new JPanel();
и от каждого места, где вы используете panel
, замените this
. Таким образом, вы будете работать с правильным экземпляром Main2 и добавлять его к GUI.
Другие проблемы:
- Вам необходимо вызвать эквивалентный метод рисования супер в вашем переопределить в своей первой строке
- Переопределить paintComponent, а не рисовать и вызвать yes. В этом переопределении
- Вы захотите изучить и использовать Java соглашения об именах, Имена переменных должны начинаться со строчной буквы, а имена классов - с заглавной. Изучение этого и последующее позволит нам лучше понять ваш код и позволит вам лучше понять код других.
- В целях безопасности добавьте аннотацию
@Override
над любым методом, который вы Подумайте, может переопределять родительский метод (например, рисование), чтобы убедиться, что вы делаете это правильно.
Например:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class Main2 extends JPanel implements ActionListener {
private static Square mySquare;
private static Circle myCircle;
private static Color myColor;
private JToggleButton buttonSquare;
private JToggleButton buttonCircle;
JFrame frame;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (buttonSquare.isSelected()) {
g.setColor(myColor);
g.fillRect(mySquare.x, mySquare.y, mySquare.width, mySquare.length);
}
if (buttonCircle.isSelected()) {
g.setColor(myColor);
g.fillOval(myCircle.x, myCircle.y, myCircle.width, myCircle.length);
}
}
public Main2() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buttonSquare = new JToggleButton("■");
buttonCircle = new JToggleButton("●");
buttonCircle.addActionListener(this);
buttonSquare.addActionListener(this);
this.add(buttonCircle);
this.add(buttonSquare);
frame.add(this);
frame.setSize(500, 500);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
repaint();
}
public static void main(String[] args) {
mySquare = new Square(30, 50, 50, 50);
myCircle = new Circle(60, 100, 50, 50);
myColor = Color.red;
new Main2();
}
}
class MyShape {
public int x, y, width, length;
public MyShape(int x, int y, int width, int length) {
this.x = x;
this.y = y;
this.width = width;
this.length = length;
}
}