Hallo liebe JavaProfis,
ich habe gegoogelt und hier im Forum gesucht, bin aber letztlich an meinem Problem hängen geblieben. Ich muss dazu sagen, dass ich, um zu lernen, gerade dabei bin, die Klassen aus "Java von Kopf bis Fuß, DotComsVersenken" auf einen Frame mit 49 Schaltflächen zu übertragen und es dort zu spielen. Der Hauptfokus liegt allerdings auf dem Lernen. Deshalb wollte ich diesen Thread auch eigentlich ins Anfängerforum legen, bin aber wegen der passenden Thematik hier wieder davon abgekommen. Falls aber ein Mod meint, es gehöre doch ins Anfängerforum, dann bitte verschieben - kein Problem.
Ausgangslage:
Die Klasse "DotComsVersenken" enthält die Main, gestaltet einen Frame, auf dem die besagten 49 Buttons sauber in Reih und Glied aufgelistet und mit "A1" bis "G7" (also 7x7-Raster) beschriftet sind. Dazu kommen
Die Klasse DCVButton gestaltet und positioniert die Buttons
Die Klasse MyMouseListener enthält die Reaktionen auf den Klick auf die Buttons
-- Die Klassen liste ich am Ende auf
Soweit, so gut.
Jetzt zum Problem:
Euch wird es wahrscheinlich banal vorkommen, aber ich checke einfach nicht, wie ich mit dem ausgelagerten MouseEvent "pressed", das ich bisher als einziges bediene, das Textfeld "txtAuswahl" mit neuem Text (der ausgewählten Button-Adresse) und das Spiel starten (beginneSpiel, s. Klasse DotComsVersenken) kann. Oder anders gefragt: Wie merke ich im Konstruktor von DotComsVersenken, ob das Mouse-Pressed-Ereignis stattgefunden hat?
Ich habe mich irgendwie ausgesperrt und komm nicht rein. Könnt ihr mir helfen?
Ich sage schon mal vielen Dank an alle, die sich hiermit beschäftigen.
Die Klassen:
ich habe gegoogelt und hier im Forum gesucht, bin aber letztlich an meinem Problem hängen geblieben. Ich muss dazu sagen, dass ich, um zu lernen, gerade dabei bin, die Klassen aus "Java von Kopf bis Fuß, DotComsVersenken" auf einen Frame mit 49 Schaltflächen zu übertragen und es dort zu spielen. Der Hauptfokus liegt allerdings auf dem Lernen. Deshalb wollte ich diesen Thread auch eigentlich ins Anfängerforum legen, bin aber wegen der passenden Thematik hier wieder davon abgekommen. Falls aber ein Mod meint, es gehöre doch ins Anfängerforum, dann bitte verschieben - kein Problem.
Ausgangslage:
Die Klasse "DotComsVersenken" enthält die Main, gestaltet einen Frame, auf dem die besagten 49 Buttons sauber in Reih und Glied aufgelistet und mit "A1" bis "G7" (also 7x7-Raster) beschriftet sind. Dazu kommen
- ein JTextField "txtAuswahl", das die Adresse des geklickten Buttons (also z. B. "A5") aufnehmen soll. Da liegt auch gleich mein Problem (mehr weiter unten)
- ein Menü "Spiel" mit "Neu", "Optionen" und "Beenden", das zunächst keine Rolle spielt.
- zwei weitere Textfelder, die den Erfolg (Vorbei, Treffer, Versenkt) bzw. die Meldungen (was auch immer) aufnehmen sollen.
Die Klasse DCVButton gestaltet und positioniert die Buttons
Die Klasse MyMouseListener enthält die Reaktionen auf den Klick auf die Buttons
-- Die Klassen liste ich am Ende auf
Soweit, so gut.
Jetzt zum Problem:
Euch wird es wahrscheinlich banal vorkommen, aber ich checke einfach nicht, wie ich mit dem ausgelagerten MouseEvent "pressed", das ich bisher als einziges bediene, das Textfeld "txtAuswahl" mit neuem Text (der ausgewählten Button-Adresse) und das Spiel starten (beginneSpiel, s. Klasse DotComsVersenken) kann. Oder anders gefragt: Wie merke ich im Konstruktor von DotComsVersenken, ob das Mouse-Pressed-Ereignis stattgefunden hat?
Ich habe mich irgendwie ausgesperrt und komm nicht rein. Könnt ihr mir helfen?
Ich sage schon mal vielen Dank an alle, die sich hiermit beschäftigen.
Die Klassen:
Java:
package pFormDotComsVersenken;
import pDotComsVersenken.*;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;
import javax.swing.JLabel;
public class DotComsVersenken extends JFrame {
/**
*
*/
private static final long serialVersionUID = -7833058886604594584L;
private JPanel contentPane;
private JTextField txtAufzeichnung;
private MeinSpielhelfer helfer = new MeinSpielhelfer();
private ArrayList<DotCom> dotComListe = new ArrayList<DotCom>();
private int anzahlVersuche=0;
private int anzahlDotComs=0;
private String rateversuch;
private DCVButton[] myButtons;
private JTextField txtAuswahl;
private JTextField textField;
private void spielEinrichten(){
// Kurzhilfe
JOptionPane.showMessageDialog(contentPane, "Ihre Aufgabe ist es, mehrere Dot-Coms zu versenken.\n"+
"Die Anzahl bestimmen Sie selbst. Jedes Dot-Com enthält drei Felder.\n"+
"Versuchen Sie, sie mit so wenig Versuchen wie möglich zu erledigen");
int z=0;
// dotComs einrichten
// Übergabe von Länge und Anzahl DotComs. Da es sich immer
// um ein 7x7-Spielfeld handelt, ist irgendwann natürlich Schluss.
anzahlDotComs = Integer.parseInt(helfer.getBenutzerEingabe("Geben Sie die DotCom-Anzahl ein: "));
for(int i=0;i<anzahlDotComs;i++){
DotCom dc = new DotCom();
String dcName =
helfer.getBenutzerEingabe("Bitte geben Sie den Namen von DotCom " + (int) i+1 + " ein: ");
dcName += ".com";
dc.setName(dcName);
dotComListe.add(dc);
txtAufzeichnung.setText("Der Name "+dcName+" wurde gespeichert!");
}
ArrayList<String> zwischen = helfer.platziereDotCom(3, anzahlDotComs);
for (DotCom aktuellesDotCom : dotComListe){
ArrayList<String> neuerOrt = new ArrayList<String>();
neuerOrt.add(0, zwischen.get(z));
neuerOrt.add(1, zwischen.get(z+1));
neuerOrt.add(2, zwischen.get(z+2));
aktuellesDotCom.setZellorte(neuerOrt);
z=z+3;
}
}
private void beginneSpiel(){
while(!dotComListe.isEmpty()){
// String rateversuch = helfer.getBenutzerEingabe("Geben Sie einen Rateversuch ein: ");
prüfeRateversuch(rateversuch);
}
beendeSpiel();
}
private void prüfeRateversuch(String rateversuch){
anzahlVersuche++;
String ergebnis = "Vorbei";
for (DotCom aktuellesDotCom : dotComListe){
ergebnis = aktuellesDotCom.prüfDich(rateversuch);
// Absprung, da weiterer Ablauf sinnlos
if(ergebnis.equals("Treffer")){
break;
}
// Versenkt! Absprung.
else if(ergebnis.equals("Versenkt")){
dotComListe.remove(aktuellesDotCom);
break;
}
}
System.out.println(ergebnis);
}
private void beendeSpiel(){
System.out.println("Alle Dot-Coms sind versenkt! Ihre Aktien sind wertlos.");
if (anzahlVersuche<=anzahlDotComs*6){
System.out.println("Sie haben nur " + anzahlVersuche + " Versuche benötigt." +
" Sie erhalten den KinoWelt-Preis!");
}
else {
System.out.println("Hat lange genug gedauert! " + anzahlVersuche + " Versuche!");
System.out.println("Warum sind Sie nicht ausgestiegen, bevor der Kurs " +
"in den Keller fiel?");
}
}
/**
* Create the frame.
*/
public DotComsVersenken() {
// Frame instanziieren
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 367, 317);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu mnNeu = new JMenu("Spiel");
menuBar.add(mnNeu);
JMenuItem mntmNeu = new JMenuItem("Neu");
mntmNeu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
spielEinrichten();
}
});
mnNeu.add(mntmNeu);
JSeparator separator = new JSeparator();
mnNeu.add(separator);
JMenuItem mntmOptionen = new JMenuItem("Optionen");
mnNeu.add(mntmOptionen);
JMenuItem mntmBeenden = new JMenuItem("Beenden");
mntmBeenden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
mnNeu.add(mntmBeenden);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
txtAufzeichnung = new JTextField();
txtAufzeichnung.setEditable(false);
txtAufzeichnung.setToolTipText("hier finden Sie die bereits getippten Punkte und das Ergebnis");
txtAufzeichnung.setBounds(10, 211, 336, 51);
contentPane.add(txtAufzeichnung);
txtAuswahl = new JTextField();
txtAuswahl.setEditable(false);
txtAuswahl.setBounds(97, 0, 32, 20);
contentPane.add(txtAuswahl);
txtAuswahl.setColumns(10);
JLabel lblNewLabel = new JLabel("Ihre Auswahl");
lblNewLabel.setBounds(10, 3, 77, 14);
contentPane.add(lblNewLabel);
JLabel lblIhrErgebnis = new JLabel("Ihr Ergebnis");
lblIhrErgebnis.setBounds(182, 3, 77, 14);
contentPane.add(lblIhrErgebnis);
textField = new JTextField();
textField.setEditable(false);
textField.setColumns(10);
textField.setBounds(269, 0, 77, 20);
contentPane.add(textField);
String[] buc = {"A","B","C","D","E","F","G"}; //Buchstaben für Benennung der Buttons
myButtons = new DCVButton[49];
MyMouseListener mml = new MyMouseListener();
for(String b:buc){
for(int i = 1;i<8;i++){
myButtons[i] = new DCVButton(b+String.valueOf(i));
myButtons[i].setName("btn"+b+String.valueOf(i));
myButtons[i].addMouseListener(mml);
contentPane.add(myButtons[i]);
}
}
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
DotComsVersenken frame = new DotComsVersenken();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Java:
package pFormDotComsVersenken;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class MyMouseListener implements MouseListener {
private DCVButton dcvB;
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
dcvB = (DCVButton) e.getComponent();
dcvB.setBackground(Color.cyan);
JOptionPane.showMessageDialog(dcvB, dcvB.getActionCommand() + " geklickt!");
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
}
Java:
package pFormDotComsVersenken;
import java.awt.Font;
import javax.swing.JButton;
public class DCVButton extends JButton {
public enum LetterNumbers {
// int[] xPos = {10,58,106,154,202,250,298};
A (10),
B (58),
C (106),
D (154),
E (202),
F (250),
G (298);
private int xPos;
private LetterNumbers(int pos){
xPos = pos;
}
public int getXPos(){
return xPos;
}
}
private int myY=0;
/**
*
*/
private static final long serialVersionUID = -1139222144343874492L;
public DCVButton(String Text) {
Font f1 = new Font("Arial", Font.BOLD, 10);
this.setFont(f1);
this.setText(Text);
this.setBounds(LetterNumbers.valueOf(Text.substring(0,1)).getXPos(),
getMyY(Integer.parseInt(Text.substring(1))),48,25);
}
public int getMyY(int zeile) {
switch(zeile){
case 1:
myY=25;break;
case 2:
myY=50;break;
case 3:
myY=75;break;
case 4:
myY=100;break;
case 5:
myY=125;break;
case 6:
myY=150;break;
case 7:
myY=175;break;
default:
myY=25;
}
return myY;
}
}
Zuletzt bearbeitet: