2016-07-01 17 views
1

Für ein Spiel, das ich mache, möchte ich, dass der Player auf einem Menübildschirm (Panel05) beginnt und dann auf eine Schaltfläche klickt, um das eigentliche Spiel zu starten (Panel00). Und wenn sie das Spiel spielen, wenn sie gewinnen oder verlieren, wenn sie auf eine andere Taste klicken, gehen sie entweder zurück zum Menü oder gehen auf eine andere Ebene. Im Moment sind die Panels alle separate Programme mit ihren eigenen Treibern, und ich bin mir nicht sicher, wie man ein Panel innerhalb eines anderen in Betrieb nehmen kann, wenn das überhaupt möglich ist. Ich würde mich über alle möglichen Ratschläge, Antworten oder Kritiken freuen. Unten ist das Panel für das MenüWie bekomme ich ein Panel in einem anderen Panel?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 


public class Panel05 extends JPanel 
{ 
private BufferedImage myImage; 
private Graphics myBuffer; 
public JButton button1; 

public Panel05() 
{ 

    myImage = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB); 
    myBuffer = myImage.getGraphics(); 




    setLayout(null); 


    button1 = new JButton(); 
    button1.setSize(100, 100); 
    button1.setLocation(500,500); 
    button1.setForeground(Color.WHITE); 
    button1.setFont(new Font("Serif", Font.BOLD, 30)); 
    button1.setText("Start"); 
    button1.addActionListener(new B1Listener()); 
    button1.setBorder(null); 
    button1.setOpaque(false); 
    button1.setContentAreaFilled(false); 
    button1.setBorderPainted(false); 
    add(button1); 
    setFocusable(true); 
} 


public void paintComponent(Graphics g) 
{ 
    ImageIcon Nintendo = new ImageIcon("trumpL.png"); 

    g.drawImage(Nintendo.getImage(), 0, 0, 1000, 1000, null); 

} 

private class B1Listener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 


    } 
} 
} 

Und hier ist das Panel für die eigentliche erste Ebene des Spiels.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import javax.swing.Timer; 


public class Panel00 extends JPanel 
{ 
private BufferedImage myImage; 
private Graphics myBuffer; 
public Timer timer; 
public JButton button1; 
public JButton button2; 
public JLabel label1 = new JLabel("Good Choice!"); 
public JLabel label2 = new JLabel("You're Fired!!"); 
public int x = 5;  //CountDown from 5 
public int delay = 1000; //milliseconds 
boolean drawWin = false; 
boolean drawLose = false; 



public Panel00() 
{ 

    myImage = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB); 
    myBuffer = myImage.getGraphics(); 




    setLayout(null); 


    button1 = new JButton(); 
    button1.setSize(300, 200); 
    button1.setLocation(100,150); 
    button1.setFont(new Font("Serif", Font.BOLD, 18)); 
    button1.setText("<html><center>"+"Until we are able to determine and understand this problem"+"<br>"+" and the dangerous threat it poses, our country cannot be the victims of horrendous attacks"+"<br>"+"by people that believe only in Jihad, and have no sense of reason or respect for human life"+"</center></html>"); 
    button1.addActionListener(new B1Listener()); 
    button1.setBorder(null); 
    button1.setOpaque(false); 
    button1.setContentAreaFilled(false); 
    button1.setBorderPainted(false); 
    add(button1); 

    button2 = new JButton(); 
    button2.setSize(300, 200); 
    button2.setLocation(600,150); 
    button2.setFont(new Font("Serif", Font.BOLD, 18)); 
    button2.setText("<html><center>"+"If ISIS wants to fight, fine with us. "+"<br>"+"We have wanted that fight for a long time. There is no room in the world for ISIS any more."+"<br>"+"The Muslims or us, one of us will have to go."+"</center></html>"); 
    button2.addActionListener(new B2Listener()); 
    button2.setBorder(null); 
    button2.setOpaque(false); 
    button2.setContentAreaFilled(false); 
    button2.setBorderPainted(false); 
    add(button2); 

    ActionListener counter = 
    new ActionListener() 
    { 
     public void actionPerformed(ActionEvent evt) 
     { 
      repaint(); 
      x--; 
      if (x == 0) 
      { 
       timer.stop(); 
      } 
     } 
    }; 
    timer = new Timer(delay, counter); 
    timer.start(); 


    setFocusable(true); 
} 


public void paintComponent(Graphics g) 
{ 
    ImageIcon Nintendo = new ImageIcon("trump speech.jpg"); 

    g.drawImage(Nintendo.getImage(), 0, 0, 1000, 1000, null); 

    ImageIcon N = new ImageIcon("happy.JPG"); 

    g.setColor(Color.WHITE); 
    g.fillOval(90,100,320,320); 

    g.setColor(Color.WHITE); 
    g.fillOval(590,100,320,320); 

    g.setColor(Color.WHITE); 
    g.setFont(new Font("Serif",Font.BOLD, 50)); 
    g.drawString(""+x,500,50); 

    if (drawWin) 
    { 
    g.drawImage(N.getImage(), 0, 0, 1000, 1000, null); 
    } 
    ImageIcon L = new ImageIcon("loser.JPG"); 
    if (drawLose) 
    { 
    g.drawImage(L.getImage(), 0, 0, 1000, 1000, null); 
    } 

} 

private class B1Listener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
    repaint(); 
    drawWin = true; 

    label1.setLocation(250,650); 
    label1.setSize(1000, 400); 
    label1.setForeground(new Color(212, 175, 55)); 
    label1.setFont(new Font("Serif", Font.BOLD, 100)); 
    add(label1); 

    button1.setEnabled(false); 
    button2.setEnabled(false); 

    button1.setText(""); 
    button2.setText(""); 

    timer.stop(); 

    } 
} 

    private class B2Listener implements ActionListener 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    repaint(); 
    drawLose = true; 

    label2.setLocation(500,700); 
    label2.setSize(400, 400); 
    label2.setForeground(Color.RED); 
    label2.setFont(new Font("Serif", Font.BOLD, 40)); 
    add(label2); 

    button1.setEnabled(false); 
    button2.setEnabled(false); 

    button1.setText(""); 
    button2.setText(""); 


    timer.stop(); 
    } 
} 
} 

Antwort

3

Vorschläge:

  • In erster Linie Swap JPanels ein Cardlayout verwenden. Sie benötigen ein anderes JPanel, eines, das das CardLayout verwendet, Sie werden Ihre zwei JPanels oben zu diesem ersten JPanel mit einem entsprechenden String Konstante hinzufügen, und dann können Sie JPanels nach Belieben austauschen. Die CardLayout Tutorial wird Ihnen zeigen, wie. Ich habe einen Code geschrieben, der in einigen von these links gefunden werden kann. Here's a nice one.
  • Andere ernsthafte Probleme in Ihrem Code - in erster Linie, nie in Bildern oder anderen Dateien innerhalb einer Methode paintcomponent lesen. Diese Methode bestimmt hauptsächlich die wahrgenommene Reaktionsfähigkeit Ihrer GUI und Sie möchten sie nie verlangsamen. Aber warum auch? Warum nicht das Bild einmal einlesen, in einer Variablen speichern und damit fertig sein?
  • Rufen Sie auch die super.paintComponent(...) Methode innerhalb Ihrer Überschreibung, sonst können Sie nicht Ihre GUI von schmutzigen Pixeln befreien.
  • Vermeiden Sie auch Null-Layouts wie die Pest. Während Null-Layouts und setBounds() Swing-Neulinge wie die einfachste und beste Möglichkeit erscheinen, komplexe GUI's zu erstellen, erzeugen Sie mit der Swing GUI'S die ernsteren Schwierigkeiten, denen Sie begegnen werden, wenn Sie sie benutzen. Sie werden die Größe Ihrer Komponenten nicht ändern, wenn die GUI die Größe ändert, sie sind eine royale Hexe, die verbessert oder beibehalten wird, sie scheitern komplett, wenn sie in Scrollpanels platziert werden. Sie sehen auf allen Plattformen oder Bildschirmauflösungen, die sich vom Original unterscheiden, grässlich aus .
+0

Könnten Sie erklären, wo Konstante in dem neuen Kartenlayout JPanel geht und was es tut genau? – JH97

+0

@ JH97: zuerst lesen [das Tutorial] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html), dann versuchen, es zu lösen, dann, wenn immer noch stecken, zeigen Sie Ihren Code und Ihre spezifische Frage. –

+0

Ich habe mehrere Stunden damit verbracht, Cardlayout anhand der Beispiele zu verstehen, und ich verstehe es einfach nicht. Ich habe 6 Zeilen Code gemacht und bin seitdem festgefahren. Ich verstehe, was das Ziel ist und was es zu tun ist, aber ich weiß nicht, wie ich es anwenden soll auf das, was ich versuche, selbst mit all deiner Hilfe. Alle Beispiele scheinen sich wirklich von meinen zu unterscheiden und verwenden viele Begriffe, mit denen ich nicht vertraut bin. Ich bin mir sicher, dass ich alles rechtzeitig erfahren werde, aber für den Moment fühle ich mich nur wie ein Idiot und verwirre mich. – JH97