2016-08-09 6 views
1

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; 

    } 

    } 
} 
+2

Ü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

+2

Und rufen Sie die Super-Malmethode innerhalb Ihrer Überschreibung. –

+1

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). –

Antwort

0

Ich fand eine gültige Lösung für mein Problem. Ich habe verwendet. Ich versuche ein einfaches Spiel mit einem erfrischenden JPanel zu erstellen, und es funktioniert.

+0

Java-GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgrößen, Bildschirmauflösungen usw. mit verschiedenen PLAFs in verschiedenen Locales arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). –