OK, Sie erstellen Ihre eigene Malmethode, zeichnen und gehen davon aus, dass sie irgendwie magisch aufgerufen wird. Dies wird nicht passieren und Swing-Grafiken funktionieren nicht. Google und gehen Sie durch die Tutorials, aber wenn Sie das tun, werden Sie sehen, dass Sie eine echte Malmethode überschreiben müssen, eine in der übergeordneten Komponente (paint
für JFrame, paintComponent
für JPanel zum Beispiel), und Sie müssen machen sicher, dass Sie die Methode korrekt überschreiben, in der Regel mit der @Override
Annotation oder es wird nicht funktionieren.
Die Tutorials sagen Ihnen auch, dass Sie nicht direkt im JFrame zeichnen, sondern in der paintComponent-Überschreibung einer JPanel.
Moral der Geschichte: Vermeide es zu erraten, wie die Programmierung funktioniert, aber gehe stattdessen zu den primären Quellen, hier zu den Tutorials, um zu sehen, wie es richtig gemacht wird.
Zum Beispiel:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;
@SuppressWarnings("serial")
public class MyDraw extends JPanel {
private static final Color RECT_COLOR = new Color(100, 200, 0);
private int larg;
private int lung;
public MyDraw(int larg, int lung) {
this.larg = larg;
this.lung = lung;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(RECT_COLOR);
g.fillRect(0, 0, larg, lung);
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(larg, lung);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("MyDraw");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int larg = 512;
int lung = 512;
frame.getContentPane().add(new MyDraw(larg, lung));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
Schwingen-Malerei-Tutorials: Lesson: Performing Custom Painting
[MCVE] oder es nicht happent –
Das Programm ist sehr einfach, ich lerne, wie JFrame zu verwenden, ... Wenn Sie es wünschen, poste ich den ganzen Code – dulindraxe
Es ist einfach, aber irgendwie ist es falsch, und ich bin mir nicht sicher, wie ich es sagen soll. Was nennt "draw (...)" übrigens? Wird es irgendwo innerhalb einer Malmethode aufgerufen? –