Hangman CardLayout/repaint?

I

IchLerneJava

Gast
Hi, bin dabei Hangman zu programmieren. Aktuell habe ich mehrere Klassen für eine grafische Realisierung erstellt (Hangman als Konsolenversion habe ich bereits erfolgreich zum laufen bekommen).

Die Hangman.java startet das Programm, in diesem Fenster soll dann der Spieler Optionen auswählen und das Spiel starten können. Nun kommt mein Anliegen. Die Hangman.java besitzt eine Menge Panels (Ich bin froh das es so aussieht). Wenn der Spieler das Spiel startet soll aber kein neues Fenster geöffnet werden, sondern der Fensterinhalt neu geschrieben werden (Zur Veranschaulichung habe ich HangmanPlay.java geschrieben, so soll das Fenster danach aussehen). Ich hab Informationen darüber gefunden es entweder mit der repaint-Methode oder den CardLayouts zu machen. Was ist bei so vielen Panels zum empfehlen? Ich habe mich schon an das Probleme gewagt, hatte aber nur mäßigen Erfolg. Jetzt werden die vielen Panels zu einem echten Problem...
Ich wäre euch für Anregungen, Hilfe und anderen Kommentaren sehr dankbar. Einen schönen Abend noch

Gruß
IchLerneJava

Folgend die Klassen:

Hangman.java
Java:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;

@SuppressWarnings("serial")
public class Hangman extends Frame
{
  private final HangmanWindowListener hangmanWindowListener = new HangmanWindowListener();
  private final HangmanActionListener hangmanActionListener = new HangmanActionListener(this);

  private final Panel                 pnlNorth              = new Panel(new GridLayout(1, 1));
  private final Panel                 pnlNorthRow1          = new Panel(new FlowLayout(
                                                                FlowLayout.LEFT));
  private final Panel                 pnlNorthRow2          = new Panel(new FlowLayout(
                                                                FlowLayout.LEFT));

  private final Panel                 pnlCenter             = new Panel(new GridLayout(1, 1));
  private final Panel                 pnlCenterCol1         = new Panel(new FlowLayout(
                                                                FlowLayout.LEFT));
  private final Panel                 pnlCenterCol2         = new Panel(new BorderLayout());
  private final Panel                 pnlCenterColx2        = new Panel(new BorderLayout());
  private final Panel                 pnlCenterCol2a        = new Panel();
  private final Panel                 pnlCenterCol2b        = new Panel();
  private final Panel                 pnlCenterCol2c        = new Panel();
  private final Panel                 pnlSouth              = new Panel(new GridLayout(1, 1));

  public Button                       btnPlay               = new Button("Start Game");
  public Button                       btnExit               = new Button("Exit");
  public Button                       btnAbout              = new Button("About");
  public Button                       btnaddCategory        = new Button(">>");
  public Button                       btnremoveCategory     = new Button("<<");

  private final Label                 lblname               = new Label("1. Name:");
  private final Label                 lblLevel              = new Label("2. Difficulty level:");
  private final Label                 lblCategory           = new Label(
                                                                "  3. Select Category/ies for your Game:");

  public TextField                    tfname                = new TextField(34);
  public TextArea                     txtAreaInfo           = new TextArea("Hello", 17, 45);
  public TextArea                     selCategory           = new TextArea(14, 20);

  public List                         listCategory          = new List(15, true);

  public CheckboxGroup                cbg                   = new CheckboxGroup();
  public Checkbox                     easy                  = new Checkbox("Easy", this.cbg, false);
  public Checkbox                     normal                = new Checkbox("Normal", this.cbg,
                                                                false);
  public Checkbox                     difficult             = new Checkbox("Difficult", this.cbg,
                                                                false);

  MenuBar                             mainbar               = new MenuBar();

  Menu                                game                  = new Menu("Game");
  Menu                                options               = new Menu("Options");
  Menu                                help                  = new Menu("Help");
  Menu                                importwc              = new Menu("Import");

  MenuItem                            newGame               = new MenuItem("New Game");
  MenuItem                            rank                  = new MenuItem("Ranking");
  MenuItem                            exit                  = new MenuItem("Exit");
  MenuItem                            level                 = new MenuItem("Level");
  MenuItem                            about                 = new MenuItem("About");
  MenuItem                            importWord            = new MenuItem("Words");
  MenuItem                            importCategory        = new MenuItem("Category");
  MenuItem                            changeColor           = new MenuItem("Change color (Hangman)");
  MenuItem                            instr                 = new MenuItem("Instructions");

  public Hangman()
  {
    this.setTitle("Hangman");
    this.setSize(700, 400);
    this.setLocationRelativeTo(null);

    this.listCategory.add("Animals");
    this.listCategory.add("Beer brands");
    this.listCategory.add("Celebrity");
    this.listCategory.add("Cities");
    this.listCategory.add("Computer science");
    this.listCategory.add("Countries");
    this.listCategory.add("Disney");
    this.listCategory.add("First name");
    this.listCategory.add("Food");
    this.listCategory.add("Games");
    this.listCategory.add("General");
    this.listCategory.add("Music bands");
    this.listCategory.add("Mountains");
    this.listCategory.add("Movies");
    this.listCategory.add("Rivers");
    this.listCategory.add("Sights");

    this.addWindowListener(this.hangmanWindowListener);
    this.btnExit.addActionListener(this.hangmanActionListener);
    this.btnAbout.addActionListener(this.hangmanActionListener);
    this.newGame.addActionListener(this.hangmanActionListener);
    this.exit.addActionListener(this.hangmanActionListener);
    this.about.addActionListener(this.hangmanActionListener);
    this.instr.addActionListener(this.hangmanActionListener);
    this.btnaddCategory.addActionListener(this.hangmanActionListener);
    this.btnremoveCategory.addActionListener(this.hangmanActionListener);

    this.btnPlay.setFont(new Font("", Font.BOLD, 12));
    this.lblCategory.setFont(new Font("", Font.BOLD, 12));
    this.lblLevel.setFont(new Font("", Font.BOLD, 12));
    this.lblname.setFont(new Font("", Font.BOLD, 12));

    this.mainbar.add(this.game);
    this.mainbar.add(this.options);
    this.mainbar.add(this.help);
    setMenuBar(this.mainbar);

    this.game.add(this.newGame);
    this.game.add(this.rank);
    this.game.addSeparator();
    this.game.add(this.exit);
    this.options.add(this.importwc);
    this.importwc.add(this.importWord);
    this.importwc.add(this.importCategory);
    this.options.add(this.changeColor);
    this.help.add(this.instr);
    this.help.add(this.about);

    this.pnlNorthRow1.add(this.lblname);
    this.pnlNorthRow1.add(this.tfname);
    this.pnlNorthRow2.add(this.lblLevel);
    this.pnlNorthRow2.add(this.easy);
    this.pnlNorthRow2.add(this.normal);
    this.pnlNorthRow2.add(this.difficult);

    this.pnlCenterCol1.add(this.txtAreaInfo);
    this.pnlCenterCol2a.add(this.listCategory);
    this.pnlCenterCol2b.add(this.btnaddCategory);
    this.pnlCenterCol2b.add(this.btnremoveCategory);
    this.pnlCenterCol2c.add(this.selCategory);
    this.pnlCenterColx2.add(this.lblCategory);

    this.pnlSouth.add(this.btnExit);
    this.pnlSouth.add(this.btnAbout);
    this.pnlSouth.add(this.btnPlay);

    this.add(this.pnlNorth, BorderLayout.NORTH);
    this.add(this.pnlCenter, BorderLayout.CENTER);
    this.add(this.pnlSouth, BorderLayout.SOUTH);

    this.pnlNorth.add(this.pnlNorthRow1);
    this.pnlNorth.add(this.pnlNorthRow2);
    this.pnlCenter.add(this.pnlCenterCol1);
    this.pnlCenter.add(this.pnlCenterCol2);
    this.pnlCenterCol2.add(this.pnlCenterColx2, BorderLayout.NORTH);
    this.pnlCenterCol2.add(this.pnlCenterCol2a, BorderLayout.WEST);
    this.pnlCenterCol2.add(this.pnlCenterCol2b, BorderLayout.CENTER);
    this.pnlCenterCol2.add(this.pnlCenterCol2c, BorderLayout.EAST);

    this.txtAreaInfo.setEditable(false);
    this.setVisible(true);
  }
  public static void main(String[] args)
  {
    @SuppressWarnings("unused")
    Hangman w = new Hangman();
  }
}

HangmanInfo.java
Java:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

@SuppressWarnings("serial")
public class HangmanInfo extends Frame implements WindowListener
{

  public TextArea     txtArea     = new TextArea();
  public Button       btnBack     = new Button("Back to Game");
  private final Panel panelCenter = new Panel(new BorderLayout());
  private final Panel panelSouth  = new Panel(new BorderLayout());

  public HangmanInfo()
  {
    addWindowListener(new WindowAdapter()
    {
      @Override
      public void windowClosing(WindowEvent e)
      {
        setVisible(false);
      }
    });
    this.setSize(400, 300);
    this.panelSouth.add(this.btnBack);
    this.panelCenter.add(this.txtArea);
    this.txtArea.setEditable(false);
    this.add(this.panelCenter, BorderLayout.CENTER);
    this.add(this.panelSouth, BorderLayout.SOUTH);

    this.btnBack.addActionListener(new ActionListener()
    {
      @Override
      public void actionPerformed(ActionEvent arg0)
      {
        setVisible(false);
      }
    });
  }

  @Override
  public void windowOpened(WindowEvent e)
  {
  }

  @Override
  public void windowClosing(WindowEvent e)
  {
  }

  @Override
  public void windowClosed(WindowEvent e)
  {
  }

  @Override
  public void windowIconified(WindowEvent e)
  {
  }

  @Override
  public void windowDeiconified(WindowEvent e)
  {
  }

  @Override
  public void windowActivated(WindowEvent e)
  {
  }

  @Override
  public void windowDeactivated(WindowEvent e)
  {
  }
}

HangmanActionListener.java
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class HangmanActionListener implements ActionListener
{
  public Hangman h;

  public HangmanActionListener(Hangman h)
  {
    this.h = h;
  }

  @Override
  public void actionPerformed(ActionEvent e)
  {
    if (e.getSource() == this.h.newGame)
    {
      System.out.println("new Game");;
    }

    else if (e.getSource() == this.h.btnExit || e.getSource() == this.h.exit)
    {
      System.exit(0);
    }

    else if (e.getSource() == this.h.about || e.getSource() == this.h.btnAbout)
    {
      HangmanInfo a = new HangmanInfo();
      a.setTitle("About Hangman");
      a.txtArea.setText("About....");
      a.setLocationRelativeTo(null);
      a.setVisible(true);
    }

    else if (e.getSource() == this.h.instr)
    {
      HangmanInfo b = new HangmanInfo();
      b.setTitle("Hangman Instructions");
      b.txtArea.setText("Instructions....");
      b.setLocationRelativeTo(null);
      b.setVisible(true);
    }
    else if (e.getSource() == this.h.btnaddCategory)
    {
      String array[] = this.h.listCategory.getSelectedItems();
      for (int i = 0; i < array.length; i++)
      {
        this.h.selCategory.append(array[i] + "\n");
      }
      this.h.setVisible(true);
    }
  }
}

HangmanWindowListener.java
Java:
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class HangmanWindowListener implements WindowListener
{

  @Override
  public void windowOpened(WindowEvent e)
  {
    // TODO Auto-generated method stub

  }

  @Override
  public void windowClosing(WindowEvent e)
  {
    // TODO Auto-generated method stub
    System.exit(0);
  }

  @Override
  public void windowClosed(WindowEvent e)
  {
    // TODO Auto-generated method stub

  }

  @Override
  public void windowIconified(WindowEvent e)
  {
    // TODO Auto-generated method stub

  }

  @Override
  public void windowDeiconified(WindowEvent e)
  {
    // TODO Auto-generated method stub

  }

  @Override
  public void windowActivated(WindowEvent e)
  {
    // TODO Auto-generated method stub

  }

  @Override
  public void windowDeactivated(WindowEvent e)
  {
    // TODO Auto-generated method stub

  }

}

HangmanPlay.java (Nur zur VERANSCHAULICHUNG)
Java:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;

@SuppressWarnings("serial")
public class HangmanPlay extends Frame
{
  private final HangmanWindowListener hangmanWindowListener = new HangmanWindowListener();
  private final Panel                 pnlNorth              = new Panel();
  private final Panel                 pnlSouth              = new Panel(new GridLayout(2, 1));
  private final Panel                 pnlSouthA             = new Panel(new FlowLayout(
                                                                FlowLayout.CENTER));
  private final Panel                 pnlSouthB             = new Panel(new FlowLayout(
                                                                FlowLayout.CENTER));

  public Label                        lblText               = new Label(
                                                                "Hier soll später das Programm laufen");

  public Button                       btnA                  = new Button("A");
  public Button                       btnB                  = new Button("B");
  public Button                       btnC                  = new Button("C");
  public Button                       btnD                  = new Button("D");
  public Button                       btnE                  = new Button("E");
  public Button                       btnF                  = new Button("F");
  public Button                       btnG                  = new Button("G");
  public Button                       btnH                  = new Button("H");
  public Button                       btnI                  = new Button("I");
  public Button                       btnJ                  = new Button("J");
  public Button                       btnK                  = new Button("K");
  public Button                       btnL                  = new Button("L");
  public Button                       btnM                  = new Button("M");
  public Button                       btnN                  = new Button("N");
  public Button                       btnO                  = new Button("O");
  public Button                       btnP                  = new Button("P");
  public Button                       btnQ                  = new Button("Q");
  public Button                       btnR                  = new Button("R");
  public Button                       btnS                  = new Button("S");
  public Button                       btnT                  = new Button("T");
  public Button                       btnU                  = new Button("U");
  public Button                       btnV                  = new Button("V");
  public Button                       btnW                  = new Button("W");
  public Button                       btnX                  = new Button("X");
  public Button                       btnY                  = new Button("Y");
  public Button                       btnZ                  = new Button("Z");

  public HangmanPlay()
  {
    this.setTitle("Hangman");
    this.setSize(700, 400);
    this.setLocationRelativeTo(null);
    this.addWindowListener(this.hangmanWindowListener);
    this.setVisible(true);

    this.pnlNorth.add(this.lblText);
    this.pnlSouthA.add(this.btnA);
    this.pnlSouthA.add(this.btnB);
    this.pnlSouthA.add(this.btnC);
    this.pnlSouthA.add(this.btnD);
    this.pnlSouthA.add(this.btnE);
    this.pnlSouthA.add(this.btnF);
    this.pnlSouthA.add(this.btnG);
    this.pnlSouthA.add(this.btnH);
    this.pnlSouthA.add(this.btnI);
    this.pnlSouthA.add(this.btnJ);
    this.pnlSouthA.add(this.btnK);
    this.pnlSouthA.add(this.btnL);
    this.pnlSouthA.add(this.btnM);
    this.pnlSouthB.add(this.btnN);
    this.pnlSouthB.add(this.btnO);
    this.pnlSouthB.add(this.btnP);
    this.pnlSouthB.add(this.btnQ);
    this.pnlSouthB.add(this.btnR);
    this.pnlSouthB.add(this.btnS);
    this.pnlSouthB.add(this.btnT);
    this.pnlSouthB.add(this.btnU);
    this.pnlSouthB.add(this.btnV);
    this.pnlSouthB.add(this.btnW);
    this.pnlSouthB.add(this.btnX);
    this.pnlSouthB.add(this.btnY);
    this.pnlSouthB.add(this.btnZ);

    this.add(this.pnlNorth);
    this.pnlSouth.add(this.pnlSouthA);
    this.pnlSouth.add(this.pnlSouthB);
    this.add(this.pnlSouth, BorderLayout.SOUTH);
  }

  public static void main(String args[])
  {
    @SuppressWarnings("unused")
    HangmanPlay f = new HangmanPlay();
  }
}
 
I

IchLerneJava

Gast
Kann niemand helfen?, es geht nur darum ob es üblich ist, so viele Panels mit CardLayouts zu verwalten? oder andere Möglichkeiten eleganter sind.

IchLerneJava
 
A

awda23ws23

Gast
Sicherlich gibt es einfachere Wege. Beispielsweise verwalte die sichbaren / nicht sichtbaren Teile in einer Liste und stelle diese je nach Zustand im OnPaint eines Panels dar
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
F Hangman Java Basics - Anfänger-Themen 14
Tacofan Hangman - ist der Buchstabe vorhanden wenn ja wo kommt er vor Java Basics - Anfänger-Themen 6
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
T Hangman spiel Java Basics - Anfänger-Themen 5
K Hangman Programm Java Basics - Anfänger-Themen 12
M hangman spiel Java Basics - Anfänger-Themen 1
G Hangman GUI Java Basics - Anfänger-Themen 6
L Hangman! Spiel Java Basics - Anfänger-Themen 5
M Hangman Spiel Java Basics - Anfänger-Themen 17
A Hangman in Java programmieren - dringend Java Basics - Anfänger-Themen 8
K Hangman Spiel ! wie immer probleme Java Basics - Anfänger-Themen 25
NoXiD Hangman problem Java Basics - Anfänger-Themen 2
S Hangman! Java Basics - Anfänger-Themen 9
S Spiel Hangman programmieren - Ausgabe funktioniert nicht!!! Java Basics - Anfänger-Themen 13
M Best Practice Wie erstelle ich ein cardlayout? Java Basics - Anfänger-Themen 22
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
Q CardLayout und NullPointer Java Basics - Anfänger-Themen 3
N Probleme mit Class in andere Class adden (Cardlayout) Java Basics - Anfänger-Themen 2
S Toolbar im CardLayout Java Basics - Anfänger-Themen 4
U CardLayout Java Basics - Anfänger-Themen 3
R CardLayout: wrong parent Java Basics - Anfänger-Themen 2
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
S Repaint() Java Basics - Anfänger-Themen 1
J Erste Schritte Mit repaint() ist Label nicht sichtbar Java Basics - Anfänger-Themen 15
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
H Graphics / repaint Java Basics - Anfänger-Themen 8
D Verhindern das repaint beim vergrößern aufgerufen wird Java Basics - Anfänger-Themen 9
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
E Probleme mit repaint() Java Basics - Anfänger-Themen 15
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
G Problem mit repaint() Java Basics - Anfänger-Themen 2
J repaint() geht gar nicht; GUI aktualisieren Java Basics - Anfänger-Themen 10
J paint() vs repaint() Java Basics - Anfänger-Themen 3
C repaint wird nicht während Druck auf Maustaste ausgeführt. Java Basics - Anfänger-Themen 4
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
P [JTable] Problem mit repaint() Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
M repaint() in run-Methode funktioniert nicht Java Basics - Anfänger-Themen 9
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
J repaint() funktioniert nicht wie gewünscht Java Basics - Anfänger-Themen 30
H Variablen Probleme mit repaint() Java Basics - Anfänger-Themen 2
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
J repaint(); launisch ? Java Basics - Anfänger-Themen 3
E Altes Bild bei repaint() löschen? Java Basics - Anfänger-Themen 10
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
N JScrollPane repaint(); geht nicht Java Basics - Anfänger-Themen 4
I repaint bei jpanel Java Basics - Anfänger-Themen 10
T repaint wir nicht mehr geöffnet! Java Basics - Anfänger-Themen 38
T Canvas aktualisierung mit repaint Java Basics - Anfänger-Themen 5
C GUI aktualisieren: repaint, validate, Fenstergröße ändern bringt nichts Java Basics - Anfänger-Themen 13
Antoras Swing repaint und Nullpointer Java Basics - Anfänger-Themen 6
O repaint() wird nicht ausgeführt Java Basics - Anfänger-Themen 3
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
Antoras swing und repaint-Ersatz Java Basics - Anfänger-Themen 8
G Automatischer repaint bei Swing so wie bei AWT? Java Basics - Anfänger-Themen 7
M Problem mit repaint Java Basics - Anfänger-Themen 2
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
T repaint einer komponente Java Basics - Anfänger-Themen 2
E repaint() aufrufen Java Basics - Anfänger-Themen 12
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
kulturfenster Probleme mit repaint() Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
K Repaint() in Methode Java Basics - Anfänger-Themen 13
G Frage zu repaint() Java Basics - Anfänger-Themen 5
D JPanel repaint() wird nicht gemacht! Java Basics - Anfänger-Themen 7
B Problem mit repaint() Java Basics - Anfänger-Themen 8
V Reihenfolge von Befehlen - hier repaint() zu spät Java Basics - Anfänger-Themen 13
G repaint in paint aufrufen? Java Basics - Anfänger-Themen 9
F repaint() - Methode verzögern lassen? Java Basics - Anfänger-Themen 3
I Erst repaint() dann zeichnen? Java Basics - Anfänger-Themen 6
D von paint() und repaint() im Applet Java Basics - Anfänger-Themen 4
J probleme mit repaint Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben