Ich versuche, ein vorhandenes Spiel zu Lernzwecken zu replizieren. Der folgende Code erstellt einen JFrame mit Quadraten, die mit Beschriftungen und Bildern gefüllt werden. Die Bezeichnung "Start" scheint sich jedoch zu replizieren. Ich habe etwas Erfahrung mit Java, aber ich bin noch ein Student. (Fast keine Erfahrung mit Swing). Ich habe das Etikett anstelle des Panels zum Rahmen hinzugefügt, weil die Quadrate, die ich gezeichnet habe, das Etikett verbergen. Danke: DJLabel dupliziert sich selbst
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test{
public static void main(String[] args){
JFrame frame = new JFrame("Miau");
MyPanel panel = new MyPanel();
frame.setVisible(true);
frame.setSize(600,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setVisible(true);
JLabel labelstart = new JLabel("Start");
frame.add(labelstart);
labelstart.setLocation(100, 100);
labelstart.setSize(30,14);
}
}
class MyPanel extends JPanel {
public void paint(Graphics g) {
g.setColor(Color.black);
//g.fillRect(10,10,570,100);
int posx = 10;
int posy = 120;
g.drawRect(10,10,570,100);
g.drawRect(posx,posy,570,430);
int size = 5;
int width = 570/size;
int height = 430/size;
for(int m=0;m<size;m++){
for(int n=0;n<size;n++){
g.drawRect(posx,posy,width,height);
posx += width;
}
posx = 10;
posy += height;
}
}
}
Überschreiben Sie "paintComponent" anstatt "paint". Siehe [this] (http://stackoverflow.com/questions/9389187/difference-between-paint-paintcomponent-and-paintcomponents-in-swing) und [this] (https://docs.oracle.com/javase/ tutorial/uiswing/painting /) – copeg
Und rufen Sie die Super-Malmethode innerhalb Ihrer Überschreibung. –
Und ignorieren Sie nicht Layout-Manager bei der Planung Ihrer GUI. Denken Sie daran, dass ein JFrame standardmäßig ein BorderLayout verwendet (in Wirklichkeit ist es contentPane). –