public Fenster()
{
MenuBar hauptMenue = new MenuBar();
Menu menue1 = new Menu("datei");
Menu menue2 = new Menu("hilfe");
menue1.add("Spiel neu starten");
menue1.add("Beenden");
menue2.add("Spielregeln");
hauptMenue.add(menue1);
hauptMenue.setHelpMenu(menue2);
setMenuBar(hauptMenue);
menue1.addActionListener(this);
addWindowListener(this);
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() instanceof MenuItem)
{
String menuAdd = evt.getActionCommand();
if (menuAdd == "beenden") System.exit(0);
}
}
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
public void windowOpened(WindowEvent evt){}
public void windowIconified(WindowEvent evt){}
public void windowDeiconified(WindowEvent evt){}
public void windowClosed(WindowEvent evt){}
public void windowActivated(WindowEvent evt){}
public void windowDeactivated(WindowEvent evt){}
}
moe_joe hat gesagt.:heir das bsp da sich gefunden habe, wollte es eigentlich ind er art realisieren
moe_joe hat gesagt.:1. ich werd's versuchen
moe_joe hat gesagt.:2. ist aber nicht so einfach konkrete fragen zu stellen wenn man garnich weis warum es nicht funktioniert.
moe_joe hat gesagt.:3. musst du damit arbeiten?! -> Nein! also kann es dir doch eigentlich egal sein wie das klassendesign ist.
moe_joe hat gesagt.:4. wäre schön wenn du das auch mal auf deutsch schreiben könntest(KSKB?!?!)
moe_joe hat gesagt.:seit ca. 2 wochen befasse ich mich jetzt auf der arbeit mit java(ausbildung als fachinformatiker). ist aber echt blöde wenn der chef zu dir kommt sagt programmier jetzt mal das und das mit java zum üben, aber keine zeit hat um dir die grundlegenden sachen von java zu erklären. das heißt viele tutorials lesen um die ganzen klassen zu verstehen usw. ganz ehrlich was würdet ihr denn machen?
final JFrame f = frame;
JMenuBar menuBar = new JMenuBar();
Button button1 = new Button("Nochmal");
button1.setPreferredSize(new Dimension(80,20));
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.print("Nochmal...");
f.dispose();
initializeNewWindow();
}
});
Button button2 = new Button("Beenden");
button2.setPreferredSize(new Dimension(80,20));
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.print("Bis zum nächsten mal...");
System.exit(0);
}
});
buttonPanel.add(button1);
buttonPanel.add(button2);
frame.add(buttonPanel,BorderLayout.SOUTH);
Hangman panel = new Hangman();
frame.add(panel,BorderLayout.CENTER);
frame.setTitle(".:Hangman:."); // Titel setzen
frame.setSize(WND_B, WND_H); // Größe setzen
frame.setBackground(Color.black);
frame.setVisible(true); // auf den Bildschirm
frame.setMenuBar(null);
panel.requestFocusInWindow();
{
MenuBar hauptMenue = new MenuBar();
Menu menue1 = new Menu("datei");
Menu menue2 = new Menu("hilfe");
menue1.add("Spiel neu starten");
menue1.add("Beenden");
menue2.add("Spielregeln");
hauptMenue.add(menue1);
hauptMenue.setHelpMenu(menue2);
setMenuBar(hauptMenue);
menue1.addActionListener(null);
addWindowListener();}
}
private static void setMenuBar(MenuBar hauptMenue) {
}
private static void addWindowListener() {
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() instanceof MenuItem)
{
String menuAdd = evt.getActionCommand();
if (menuAdd == "beenden") System.exit(0);
}
}
public static void main(String args[]) {
initializeNewWindow();
}
}
myJFrame.setJMenuBar(jMenuBar);
ublic class DBTool {
protected Shell dbShell;
Display toolDisplay;
static DBTool dbTool;
static DBMonitoring moniWindow;
public static void main(String[] args) {
try {
dbTool = new DBTool();
dbTool.open();
} catch (Exception ex) {
System.out.println("Fehler in main");
ex.printStackTrace();
}
}
public void open() {
toolDisplay = Display.getDefault();
createContents();
dbShell.open();
dbShell.layout();
while (!dbShell.isDisposed()) {
if (!toolDisplay.readAndDispatch())
toolDisplay.sleep();
}
}
public void createContents(){
//hier den ganzen gui-kram reinschreiben...
}
Hobbit_Im_Blutrausch hat gesagt.:1.) Nicht AWT und Swing mischen (du verwendest Button und JFrame, JMenu, ...)
2.) Warum ist das Frame final?
3.) Warum sind die ganzen Buttons und MenuItems etc. keine Klassenvariablen?
4.) In welcher Methode befinden wir uns eigentlich gerade? Im Konstruktor?
5.) Was sollen die geschweiften Klammern um dem Block, der das Menu initiaisiert?
6.) Warum verwendest du so oft static, obwohl du es nicht verwenden musst/sollst?
moe_joe hat gesagt.:also der sacht mir jetzt
Cannot make a static reference to the non-static method setMenuBar(MenuBar) from the type Frame
bin ja dabei alles auf swing umzubauen1.) Nicht AWT und Swing mischen (du verwendest Button und JFrame, JMenu, ...)
das frame is final, weil ich sonst probleme mit f.dispose bekomme2.) Warum ist das Frame final?
weil ich es anders noch nicht anders hinbekommen habe und es funktioniert ja3.Warum sind die ganzen Buttons und MenuItems etc. keine Klassenvariablen?
da bin ich überfragt^^4.) In welcher Methode befinden wir uns eigentlich gerade? Im Konstruktor?
weil ich das so in nem tutorial gefunden habe5.) Was sollen die geschweiften Klammern um dem Block, der das Menu initiaisiert?
das programm funktioniert doch! das für mich ersma die hauptsache. ob mit oder ohne static6.) Warum verwendest du so oft static, obwohl du es nicht verwenden musst/sollst?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MenuTest extends JFrame implements ActionListener {
private JMenuBar bar = null;
private JMenu datei = null;
private JMenu info = null;
private JMenu sub = null;
private JMenuItem doSomething = null;
private JMenuItem exit = null;
private JMenuItem help = null;
private JMenuItem about = null;
private JLabel text = null;
public MenuTest() {
setTitle("Menu-Test");
bar = new JMenuBar();
datei = new JMenu("Datei");
info = new JMenu("Info");
sub = new JMenu("Sub-Menü");
doSomething = new JMenuItem("Mach Was");
exit = new JMenuItem("Beenden");
help = new JMenuItem("Hilfe");
about = new JMenuItem("Info");
text = new JLabel("Diese Anwendung demonstriert die Verwendung von Menüs");
setJMenuBar(bar);
bar.add(datei);
bar.add(info);
datei.add(sub);
datei.add(exit);
info.add(help);
info.add(about);
sub.add(doSomething);
getContentPane().add(text);
exit.addActionListener(this);
doSomething.addActionListener(this);
help.addActionListener(this);
about.addActionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == doSomething) {
System.out.println("Mach Was");
}
else if (evt.getSource() == exit) {
System.exit(0);
}
else if (evt.getSource() == about) {
System.out.println("Programm erstellt von mir");
}
else if (evt.getSource() == help) {
System.out.println("Das Programm ist hilflos");
}
}
public static void main(String[] args) {
MenuTest test = new MenuTest();
test.pack();
test.setVisible(true);
}
}
public static void main(String args[]) {
MenuTest test = new MenuTest();
test.pack();
test.setVisible(true);
initializeNewWindow();
getContentPane().add(text);
Beenden.addActionListener((ActionListener) this);
Spielregeln.addActionListener((ActionListener) this);
Nochmal.addActionListener((ActionListener) this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
moe_joe hat gesagt.:seit ca. 2 wochen befasse ich mich jetzt auf der arbeit mit java(ausbildung als fachinformatiker). ist aber echt blöde wenn der chef zu dir kommt sagt programmier jetzt mal das und das mit java zum üben, aber keine zeit hat um dir die grundlegenden sachen von java zu erklären. das heißt viele tutorials lesen um die ganzen klassen zu verstehen usw. ganz ehrlich was würdet ihr denn machen?
Ähm.. hab ich denn gesagt das es leicht wird?! nö.Ähm... Wer hat denn gesagt dass die Ausbildung leicht wird?
moe_joe hat gesagt.:nene, mir macht das programmieren ja auch spaß, so is es nicht. Habe bloß vorher immer mit C/C++ gearbeitet, und da gibt es ja schon einige unterschiede zu java.
public Hangman() { // Hauptroutine
String stmp=new String();
try {
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
while ((stmp=f.readLine())!=null) { // solange das, was wir lesen, noch sichtbar ist
if (stmp.charAt(0) != '#') { // und wenn kein '#' am anfang steht
wordcount++; // zähle es als Wort
}
}
if (wordcount==0) {
System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
System.exit(0);
}
System.out.println("Woerter in Datendatei: "+wordcount); // Statusbericht
while (wordseek==0) { // Solange wordseek noch 0 ist, tue ...
wordseek=(int)(Math.random()*wordcount)+1; // hol' Dir einen Integer-Wert
}
System.out.print("Ausgewaehltes Wort: #"+wordseek); // Statusbericht
f.seek(0); // Position auf Dateianfang setzen
wordcount=0; // Wieder auf NULL
while ((stmp=f.readLine())!=null) { // und das ganze von vorne
if (stmp.charAt(0) != '#') {
wordcount++;
if (wordcount==wordseek) { // wenn an der Position, die wir suchen ...
myword=stmp; // setze myword auf gerade gelesenen String
break;
}
}
}
f.close(); // Datei wieder schließen
}
bar = new JMenu();
datei = new JMenu("Datei");
info = new JMenu("Info");
nochmal = new JMenuItem("Neu starten");
beenden = new JMenuItem("Beenden");
spielregeln = new JMenuItem("Hilfe");
text = new JLabel("Diese Anwendung demonstriert die Verwendung von Menüs");
setJMenuBar(bar);
bar.add(datei);
bar.add(info);
datei.add(nochmal);
datei.add(beenden);
info.add(spielregeln);
getContentPane().add(text);
beenden.addActionListener(this);
nochmal.addActionListener(this);
spielregeln.addActionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == nochmal) {
System.out.println("Neu starten");
}
else if (evt.getSource() == beenden) {
System.exit(0);
}
else if (evt.getSource() == spielregeln) {
System.out.println("Spielregeln");
}
}
public static void main(String[] args) {
Hangman test = new Hangman();
test.pack();
test.setVisible(true);
}
catch(IOException ioe) { // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
System.out.println("IOException: "+ioe.toString()); // Fehlermeldung
System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
System.exit(0);
}
CONTROL=new KL(); // neuer KeyListener: CONTROL <-----Damit hat der nen Problem!!!!
addKeyListener(CONTROL); // hinzufügen <-----Damit hat der nen Problem!!!!
xyword=new char[myword.length()]; // array erstellen
for (int i=0;i<myword.length();i++) { // array initialisieren
xyword[i]='_';
}
probed=new char[alphab.length]; // array erstellen
notprobed=new char[alphab.length];
for (int i=0;i<alphab.length;i++) { // array initialisieren
probed[i]='-';
notprobed[i]=alphab[i];
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g) { // die Grafiken
Toolkit tk=Toolkit.getDefaultToolkit();
// g.drawString("Datensaetze: "+maxdat,40,350);
// g.drawString("Wort: "+myword,40,200);
// g.drawString("Zeichen: "+c,40,230);
g.setColor(Color.black); // Farbe auf Weiß
g.fillRect(0,0,WND_B,WND_H); // Fenster Weiß machen
g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
g.drawString("Wort: "+new String(xyword),40,215);
if (mistakes!=-1) {
g.drawString("Buchstaben: ",40,260);
for (int i=0;i<alphab.length;i++) {
g.drawChars(probed,i,1,118+i*8,260);
g.drawChars(notprobed,i,1,118+i*8,275);
}
g.drawString("Fehler: "+mistakes,40,230);
}
UpdateHangMan(g); // Hangman updaten
}
KeyListener CONTROL=new KL();
addKeyListener(CONTROL);
KeyListener control=new KL();
addKeyListener( control);
addKeyListener( new KL());
wusste ich nicht, dankeDann sind Variablen in Großbuchstaben etwas ungewöhnlich; besser wäre
KeyListener control=new KL();
addKeyListener(control); //control cannot be resolved to a type
class KL implements KeyListener
{
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) {
c=e.getKeyChar(); // Taste holen
c=Character.toUpperCase(c); // Buchstabe(?) evtl. GROß machen
int i;
boolean status=false; // Booleans
boolean check=false; // für versch. Status-Werte
for (i=0;i<alphab.length;i++)
{
if (c==alphab[i])
{ // wenn c = einer der Buchstaben des Alphabets ist ...
if (probed[i]!=c) probed[i]=c; else check=true; // und der noch nicht vorher getippt wurde, dann ... u.s.w.
if (notprobed[i]==c) notprobed[i]='-';
}
}
int underscores=0; // Integer für Anzahl der "_" im bisherigen Wort
for (i=0;i<myword.length();i++)
{
if (c==Character.toUpperCase(myword.charAt(i)))
{
xyword[i]=myword.charAt(i);
status=true;
}
Das versucht doch auch niemand, oder?ms hat gesagt.:KeyListener ist ein Interface, das kannst du nicht mit new so instanzieren.
Ich habe mal angenommen, dass KL genau das ist. //EDIT: Ok, ist durch den Post bestätigtms hat gesagt.:Du brauchst eine Klasse, die dieses Interface implementiert.
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
public class Hangman extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
// Globale Variablen
final static int WND_B=435, WND_H=360;
final int SX=50, SY=50;
RandomAccessFile file;
String myword=null; // das zu erratene wort
char xyword[]; // das ungelöste Wort
char probed[];
char notprobed[];
char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z',
'Ä','Ö','Ü','ß'};
int mistakes=0; // Anzahl der Fehler
int tries=0; // Anzahl der Versuche
KL CONTROL;
char c;
private JMenu bar = null;
private JMenu datei = null;
private JMenu info = null;
private JMenuItem nochmal = null;
private JMenuItem beenden = null;
private JMenuItem spielregeln = null;
private JLabel text = null;
public Hangman() // Hauptroutine
{
String stmp=new String();
try
{
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
while ((stmp=f.readLine())!=null) // solange das, was wir lesen, noch sichtbar ist
{
if (stmp.charAt(0) != '#') // und wenn kein '#' am anfang steht
{
wordcount++; // zähle es als Wort
}
if (wordcount==0)
{
System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
System.exit(0);
}
System.out.println("Woerter in Datendatei: "+wordcount); // Statusbericht
while (wordseek==0)
{
wordseek=(int)(Math.random()*wordcount)+1; // hol' Dir einen Integer-Wert
}
System.out.print("Ausgewaehltes Wort: #"+wordseek); // Statusbericht
f.seek(0); // Position auf Dateianfang setzen
wordcount=0; // Wieder auf NULL
while ((stmp=f.readLine())!=null)
{ // und das ganze von vorne
if (stmp.charAt(0) != '#')
{
wordcount++;
if (wordcount==wordseek)
{
myword=stmp; // setze myword auf gerade gelesenen String
break;
}
}
}
f.close(); // Datei wieder schließen
bar = new JMenu();
datei = new JMenu("Datei");
info = new JMenu("Info");
nochmal = new JMenuItem("Neu starten");
beenden = new JMenuItem("Beenden");
spielregeln = new JMenuItem("Hilfe");
text = new JLabel("Diese Anwendung demonstriert die Verwendung von Menüs");
setJMenuBar(bar);
bar.add(datei);
bar.add(info);
datei.add(nochmal);
datei.add(beenden);
info.add(spielregeln);
getContentPane().add(text);
beenden.addActionListener(this);
nochmal.addActionListener(this);
spielregeln.addActionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == nochmal)
{
System.out.println("Neu starten");
}
else if (evt.getSource() == beenden)
{
System.exit(0);
}
else if (evt.getSource() == spielregeln)
{
System.out.println("Spielregeln");
}
}
public static void main(String[] args)
{
Hangman test = new Hangman();
test.pack();
test.setVisible(true);
}
catch(IOException ioe) // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
{
System.out.println("IOException: "+ioe.toString()); // Fehlermeldung
System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
System.exit(0);
}
KeyListener control=new KL();
addKeyListener(control); // hinzufügen <-----Damit hat der nen Problem!!!!
xyword=new char[myword.length()]; // array erstellen
for (int i=0;i<myword.length();i++) // array initialisieren
{
xyword[i]='_';
}
probed=new char[alphab.length]; // array erstellen
notprobed=new char[alphab.length];
for (int i=0;i<alphab.length;i++) // array initialisieren
{
probed[i]='-';
notprobed[i]=alphab[i];
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{ // die Grafiken
Toolkit tk=Toolkit.getDefaultToolkit();
// g.drawString("Datensaetze: "+maxdat,40,350);
// g.drawString("Wort: "+myword,40,200);
// g.drawString("Zeichen: "+c,40,230);
g.setColor(Color.black); // Farbe auf Weiß
g.fillRect(0,0,WND_B,WND_H); // Fenster Weiß machen
g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
g.drawString("Wort: "+new String(xyword),40,215);
if (mistakes!=-1)
{
g.drawString("Buchstaben: ",40,260);
for (int i=0;i<alphab.length;i++)
{
g.drawChars(probed,i,1,118+i*8,260);
g.drawChars(notprobed,i,1,118+i*8,275);
}
g.drawString("Fehler: "+mistakes,40,230);
}
UpdateHangMan(g); // Hangman updaten
}
public void UpdateHangMan(Graphics g)
{
Toolkit tk=Toolkit.getDefaultToolkit(); // Toolkit (für Grafikdatei-Support) zuweisen
switch(mistakes) // CASE mistakes of ...
{
case 6:
g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
g.setColor(Color.red);
g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
g.setColor(Color.white);
g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
removeKeyListener(CONTROL); // Tastenkontrolle abschalten
break;
case 5:
g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
break;
case 4:
g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
break;
case 3:
g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
break;
case 2:
g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
break;
case 1:
g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
break;
case 0:
g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
break;
case -1:
g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
g.setColor(Color.green);
g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
removeKeyListener(CONTROL);
break;
}
}
class KL implements KeyListener
{
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) {
c=e.getKeyChar(); // Taste holen
c=Character.toUpperCase(c); // Buchstabe(?) evtl. GROß machen
int i;
boolean status=false; // Booleans
boolean check=false; // für versch. Status-Werte
for (i=0;i<alphab.length;i++)
{
if (c==alphab[i]) // wenn c = einer der Buchstaben des Alphabets ist ...
{
if (probed[i]!=c) probed[i]=c; else check=true; // und der noch nicht vorher getippt wurde, dann ... u.s.w.
if (notprobed[i]==c) notprobed[i]='-';
}
}
int underscores=0; // Integer für Anzahl der "_" im bisherigen Wort
for (i=0;i<myword.length();i++)
{
if (c==Character.toUpperCase(myword.charAt(i)))
{
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_') underscores++;
}
if (!status && !check) mistakes++; // wenn der Buchstabe Falsch ist und nicht schon einmal getippt wurde mistakes+1
if (!check) tries++; // solange kein doppelter Tip: tries+1;
if (underscores==0 || mistakes>=6)
{
System.out.println(" ("+myword+")");
System.out.println("Anzahl Versuche: "+tries+" davon falsch: "+mistakes);
System.out.println("Getippte Buchstaben: "+new String(probed));
System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
}
if (underscores==0) mistakes=-1; // wenn keine fehlenden Zeichen im Lösungswort ...
if (mistakes>=6) mistakes=6; // wenn mehr als 5 Fehler gemacht wurden
repaint(); // Grafikfenster neuzeichnen
}
}
}
public Hangman()
public class Hangman extends JFrame implements ActionListener {
// ...
public Hangman() {
try {
} catch ( Exception e) { //--- besser: genau angeben, welche Art von Exception man catchen will
// ...
}
}
public static void main( String[] args){
// ...
}
public void actionPerformed(ActionEvent evt) {
// ...
}
// weitere Methoden ...
}
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
public class Hangman extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
// Globale Variablen
final static int WND_B=435, WND_H=360;
final int SX=50, SY=50;
RandomAccessFile file;
String myword=null; // das zu erratene wort
char xyword[]; // das ungelöste Wort
char probed[];
char notprobed[];
char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z',
'Ä','Ö','Ü','ß'};
int mistakes=0; // Anzahl der Fehler
int tries=0; // Anzahl der Versuche
KL CONTROL;
char c;
private JMenu bar = null;
private JMenu datei = null;
private JMenu info = null;
private JMenuItem nochmal = null;
private JMenuItem beenden = null;
private JMenuItem spielregeln = null;
private JLabel text = null;
public Hangman() { // Hauptroutine
String stmp=new String();
try {
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
while ((stmp=f.readLine())!=null) // solange das, was wir
// lesen, noch sichtbar ist
{
if (stmp.charAt(0) != '#') // und wenn kein '#' am
// anfang steht
{
wordcount++; // zähle es als Wort
}
if (wordcount==0)
{
System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
System.exit(0);
}
System.out.println("Woerter in Datendatei: "+wordcount); // Statusbericht
while (wordseek==0)
{
wordseek=(int)(Math.random()*wordcount)+1; // hol'
// Dir
// einen
// Integer-Wert
}
System.out.print("Ausgewaehltes Wort: #"+wordseek); // Statusbericht
f.seek(0); // Position auf Dateianfang setzen
wordcount=0; // Wieder auf NULL
while ((stmp=f.readLine())!=null)
{ // und das ganze von vorne
if (stmp.charAt(0) != '#')
{
wordcount++;
if (wordcount==wordseek)
{
myword=stmp; // setze
// myword
// auf
// gerade
// gelesenen
// String
break;
}
}
}
f.close(); // Datei wieder schließen
} // alex0801: Ende des äußeren Whiles ergänzt...
// alex0801: Ein try brauch auch ein entsprechendes catch
}catch (IOException e){
}
bar = new JMenu();
datei = new JMenu("Datei");
info = new JMenu("Info");
nochmal = new JMenuItem("Neu starten");
beenden = new JMenuItem("Beenden");
spielregeln = new JMenuItem("Hilfe");
text = new JLabel("Diese Anwendung demonstriert die Verwendung von Menüs");
// alex0801: Hab ich mal eingefügt.. Solltest "bar" in
// "menu" umbenennen....!
JMenuBar menubar = new JMenuBar();
menubar.add(bar);
setJMenuBar(menubar);
bar.add(datei);
bar.add(info);
datei.add(nochmal);
datei.add(beenden);
info.add(spielregeln);
getContentPane().add(text);
beenden.addActionListener(this);
nochmal.addActionListener(this);
spielregeln.addActionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == nochmal)
{
System.out.println("Neu starten");
}
else if (evt.getSource() == beenden)
{
System.exit(0);
}
else if (evt.getSource() == spielregeln)
{
System.out.println("Spielregeln");
}
}
public static void main(String[] args) {
Hangman test = new Hangman();
test.pack();
test.setVisible(true);
}
// alex0801: Das hier sollte wohl weiter oben stehen? Try-Catch-Blöcke lassen sich nicht Methodenübergreifend nutzen
// catch(IOException ioe) // Falls ein Fehler auftreten sollte
// // Fehlermeldung ausgeben
// {
// System.out.println("IOException: "+ioe.toString()); // Fehlermeldung
// System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
// System.exit(0);
// }
KeyListener control=new KL();
addKeyListener(control); // hinzufügen <-----Damit hat der
// nen Problem!!!!
xyword=new char[myword.length()]; // array erstellen
for (int i=0;i<myword.length();i++) // array initialisieren
{
xyword[i]='_';
}
probed=new char[alphab.length]; // array
// erstellen
notprobed=new char[alphab.length];
for (int i=0;i<alphab.length;i++) // array initialisieren
{
probed[i]='-';
notprobed[i]=alphab[i];
}
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
// die Grafiken
Toolkit tk=Toolkit.getDefaultToolkit();
// g.drawString("Datensaetze: "+maxdat,40,350);
// g.drawString("Wort: "+myword,40,200);
// g.drawString("Zeichen: "+c,40,230);
g.setColor(Color.black); // Farbe auf Weiß
g.fillRect(0,0,WND_B,WND_H); // Fenster Weiß machen
g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
g.drawString("Wort: "+new String(xyword),40,215);
if (mistakes!=-1) {
g.drawString("Buchstaben: ",40,260);
for (int i=0;i<alphab.length;i++) {
g.drawChars(probed,i,1,118+i*8,260);
g.drawChars(notprobed,i,1,118+i*8,275);
}
g.drawString("Fehler: "+mistakes,40,230);
}
UpdateHangMan(g); // Hangman updaten
}
public void UpdateHangMan(Graphics g) {
Toolkit tk=Toolkit.getDefaultToolkit(); // Toolkit (für
// Grafikdatei-Support)
// zuweisen
switch(mistakes) {
// CASE mistakes of ...
case 6:
g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
g.setColor(Color.red);
g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
g.setColor(Color.white);
g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
removeKeyListener(CONTROL); // Tastenkontrolle abschalten
break;
case 5:
g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
break;
case 4:
g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
break;
case 3:
g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
break;
case 2:
g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
break;
case 1:
g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
break;
case 0:
g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
break;
case -1:
g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
g.setColor(Color.green);
g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
removeKeyListener(CONTROL);
break;
}
}
class KL implements KeyListener {
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) {
c=e.getKeyChar(); // Taste holen
c=Character.toUpperCase(c); // Buchstabe(?) evtl.
// GROß machen
int i;
boolean status=false; // Booleans
boolean check=false; // für versch.
// Status-Werte
for (i=0;i<alphab.length;i++) {
if (c==alphab[i]) { // wenn c = einer der
// Buchstaben des Alphabets
// ist ...
// und der noch nicht vorher getippt wurde, dann ...
// u.s.w.
if (probed[i]!=c)
probed[i]=c;
else
check=true;
if (notprobed[i]==c)
notprobed[i]='-';
}
}
int underscores=0; // Integer für Anzahl
// der "_" im bisherigen
// Wort
for (i=0;i<myword.length();i++)
{
if (c==Character.toUpperCase(myword.charAt(i)))
{
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_') underscores++;
}
if (!status && !check) mistakes++; // wenn der
// Buchstabe
// Falsch ist
// und nicht
// schon einmal
// getippt wurde
// mistakes+1
if (!check) tries++; // solange kein doppelter Tip:
// tries+1;
if (underscores==0 || mistakes>=6)
{
System.out.println(" ("+myword+")");
System.out.println("Anzahl Versuche: "+tries+" davon falsch: "+mistakes);
System.out.println("Getippte Buchstaben: "+new String(probed));
System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
}
if (underscores==0) mistakes=-1; // wenn keine
// fehlenden Zeichen
// im Lösungswort
// ...
if (mistakes>=6) mistakes=6; // wenn mehr als 5
// Fehler gemacht
// wurden
repaint(); // Grafikfenster neuzeichnen
}
}
}
Murray hat gesagt.:Code:catch ( Exception e) { //--- besser: genau angeben, welche Art von Exception man catchen will wie meisnt du das jetzt genau? komm grad nich hinterher }