Input/Output JFrame mit JButton und JTextfield

Es gibt 2 Basistypen Jars zu erzeugen:

Wenn du Export -> Java -> JAR file benutzt musst du 2x auf Next drücken und unten die Main-Klasse auswählen.
Wenn du Export -> Java -> Runnable JAR file benutzt kannst du die Start-Konfiguration auswählen und Eclipse sollte nach der automatisch packen.

Kannst vorm Wegschicken ja versuchen ob du es selbst starken kannst.
 
Ja ich kanns selbst aufmachen. ich brauch ne executable weil ich nich mag dass man ne batch
dafür braucht. Bei meim Dad steht immer mainClassNotFound weist du was das zu bedeuten hat weil bei mir gehts?

mfg Nick
 
Das ist seltsam. Wenn du die Jar starten kannst sollte sie afaik jeder andere auch starten können. Öffne die Jar mal per 7zip oder einen anderen Packer der das unterstützt (glaube WinRAR konnte das auch), und prüfe ob darin ein Ordner namens "META-INF" ist, der eine Datei namens "MANIFEST.MF" enthält in der neben anderen noch "Main-Class: (Text)" steht.
 
Ich hab grad zu testzwecken ein neues Projekt in Eclipse erstellt. Ich hab da meine Datein
reinkopiert und angepasst (wegen package und so). Jetzt will ich das beim Exportieren
auswählen... geht aber nicht dafür kann ich Jar Datein auswählen die ich so gar nicht mehr in meiner Workspace hab !? das is leider irgendwie doof. Ich gaub ich installier Eclipse mal neu...

Ach ja es gab eine Manifest.MF und die hatte auch den Richtigen Verweis.. mein Dad hat ne uralte
Java Verison und ich hab die Version 7, mach das was?

mfg Nick
 
Du musst das Projekt mindestens einmal gestartet haben, damit Eclipse eine Run-Configuration anlegt. Nur weil du ein neues Projekt anlegst verschwindet das alte nicht automatisch aus dem Workspace (zum Glück). Ob es geht hängt von deiner Build-Configuration ab. Wenn du es mit Java 7-Kompatiblität buildest geht es nicht mit niedrigeren. Unter 5 würde ich es nicht builden lassen, da dir sonst die generics fehlen. Allerdings kenne ich mich mit der Entwicklung da nicht so aus, lerne Java erst seit 3 - 4 Jahren. Ich denke aber, dass die Fehlermeldung im nicht-kompatiblen Fall anderst lauten würde.
Lad die Jar mal im Forum hoch.
 
Also das ist die jar im Anhang.
Das ist die Main:
Java:
package package005;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
 
import package005.Field.FieldEvent;
import package005.Field.FieldEventListener;
import package005.Field.SomeEvent;
import package005.Textverarbeitung.TextverarbeitungListener;
 
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
public class Main {
    private JFrame fenster;
    private JTextField textInput;
    private JTextArea textOutput;
    private Field fields;
    
    public Main(int w, int h){
        Field[][] fields = Field.createFields(10,10);
        fields[5][5].addEvent(createSomeEvent());
        
        //Nur GUI
        fenster = new JFrame("EngineVersuch001");
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(w, h);
        fenster.setResizable(false);
        
        JScrollPane textOutputScroll = new JScrollPane(textOutput, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);        textOutput = new JTextArea(20,50);
        textOutput.setEditable(false);
        textOutput.add(textOutputScroll);
        
        textInput = new JTextField(50);
         
        JButton checkButton = new JButton(new AbstractAction("Bestätigen") {
            public void actionPerformed(ActionEvent e) {
                checkButtonActionPerformed();
            }
        });
        
        
        Box container1 = new Box(BoxLayout.Y_AXIS);
        Box container2 = new Box(BoxLayout.X_AXIS);
        Box container3 = new Box(BoxLayout.X_AXIS);
        Box container4 = new Box(BoxLayout.X_AXIS);
        
        container2.add(textOutput);
        container2.add(new JScrollPane(textOutput, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
        container3.add(textInput);
        container4.add(checkButton);
        container1.add(container2);
        container1.add(container3);
        container1.add(container4);
        fenster.add(container1);
        
        fenster.setVisible(true);
    }
    
    private FieldEvent createSomeEvent() {							//neu
        SomeEvent event = new SomeEvent();							//neu
        event.addFieldEventListener(new FieldEventListener() {		//neu
            public void giveTextOut(String s) {						//neu
                writeToTextOutput(s);								//
            }														//
        });
        return(event);
    }
    
    
    private void checkButtonActionPerformed() {
        Textverarbeitung eingabe = new Textverarbeitung();      //erstellt Verbindung zu Textverarbeitungsmethode "Eingabe"
        eingabe.setListener(new TextverarbeitungListener() {    //erstellt Listener für "Eingabe"
            public void stringOutput(String s) {    //gibt die Variable s aus die von Textverarbeitung.verarbeiteEingabe kommt
                writeToTextOutput(s);
            }
        });
        String userInput = textInput.getText();                        //weist dem String die Benutzereingabe vom JTextfield textInput zu
        eingabe.verarbeiteEingabe(userInput);                 //gibt die Benutzereingabe an Textverarbeitungsmethode weiter
        textInput.setText(null);    
    }
    private void writeToTextOutput(String text) {
        textOutput.append(text + "\n");
    }
    
    public static void main(String[] args){
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main(580,430);
            }
        });
    }
}

TextVerarbeitung:
Java:
package package005;
import package005.Textverarbeitung.TextverarbeitungListener;

public class Textverarbeitung {
    private TextverarbeitungListener listener;
    
    public void verarbeiteEingabe(String userInput) {
        userInput = userInput.toLowerCase();
        String[] befehle ={"north","east","south","west","map","end","start"};
       
        	boolean korrekteEingabe = false;
        
        	
        	for (int x =0;x<befehle.length;x++){// for-SChleife die Alle Befehle im Befehlsarray durchgeht und konntrolliert
        	
        		if(userInput.equals(befehle[x])){	//If (die UserEingabe == dem Befehl[mit der aktuellen Nummer des Durchlaufs]) dann gib etwas aus
        			if(listener != null) {
        				listener.stringOutput("Player: " + userInput);
        				korrekteEingabe = true;
        			}
        		}
        	
        	}//Ende for-Schleife
                	
        	if(userInput.trim().length() != 0){
        		if(korrekteEingabe == false){
        			listener.stringOutput("!Falsche Eingabe!");
        		}
        	}
    }
        	    
 
    public static interface TextverarbeitungListener {
        public void stringOutput(String s);
    }
 
    public void setListener(TextverarbeitungListener textverarbeitungListener) {
        listener = textverarbeitungListener;
    }
}

Field:
Java:
package package005;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
 
public class Field {
    private static enum FieldType { //Eine Sammlung von Konstanten= 1 Enum
        HOUSE, WATER, HILL, WOOD
    };
    
    private FieldType type;             			//Klassenvariable--> Refernz auf die gesamte Klasse
    private List<FieldEvent> events;				//<> weil generic
    												
    public Field(FieldType type) {     				//Speichere Klassenvariable
        this.type = type;               			//als das hier
        events = new LinkedList<Field.FieldEvent>();//erzeugt eine neue Liste und speichert sie als events
    }												
    public void addEvent(FieldEvent event) {		
       events.add(event);							
    }
    
    abstract static class FieldEvent {				
        private List<FieldEventListener> listeners;
        											
        protected FieldEvent() {						
            super();
            listeners = new LinkedList<Field.FieldEventListener>();
        }
        
        public abstract void entered();
        
        protected void fireGiveTextOutEvent(String s) {
            for(FieldEventListener l:listeners) {
                l.giveTextOut(s);
            }
        }
        
        public void addFieldEventListener(FieldEventListener l) {
            listeners.add(l);
        }
    }
    static class SomeEvent extends FieldEvent {
        public void entered() {
            fireGiveTextOutEvent("Text");
        }
    }
    public interface FieldEventListener {
        public void giveTextOut(String s);
    }
    
    
    
    
    
    static Field[][] createFields(int xAnzahl, int yAnzahl) {
        Field[][] fields = new Field[xAnzahl][yAnzahl];
        
        for(int x = 0; x < fields.length; x++) {                    //Wandert die x-Koordinate Durch
            for(int y = 0; y < fields[x].length; y++) {             //und alle y
                fields[x][y] = new Field(FieldType.WOOD);           //weist jedem dann einen BodenTyp zu und
                /*Random zuffalsZahl = new Random();                  //erstellt neuen Zufallsgenerator.
                int zahl = zuffalsZahl.nextInt(10);                 //erstellt neuen Int und weist ihm Zuffalszahl zu
                if(zahl > 9) {                                      //if Bedingung: wenn zahl > 9 dann addEvent --> Chance 1:10 oder 1:9 ?
                    fields[x][y].addEvent(new FieldEvent());//weist wenn Bedingung true ist Event hinzu.
                }*/
            }   
        }
        return(fields);
    }
}

und die zur Zeit extrem sinnlose GameEvent:
Java:
package package005;

public class GameEvent {
	
	public String Karte(String Karte[][]) {
		String Event=null;
		
		
		return Event;
	}
	

}


mfg Nick


Edit:
JAR Y U NO Work!?

.. jetzt gehts
 

Anhänge

Zuletzt bearbeitet:
Die Jar funktioniert bei mir problemlos.
Statt immer in ein neues Package zu kopieren solltest du dir vielleicht eine Versionskontrollsoftware zulegen. Ich verwende TortoiseSVN. Das bindet sich direkt im Explorer ein (gibt angeblich auch ein Plugin für Eclipse, aber ich würde das nicht mischen), und ist eigendlich sehr einfach zu verwenden. (Sobald man sein erstes Commit hinter sich hat. ^^)
 

Anhänge

Krasser thread:

Erst dachte ich, es wäre eine Grundsatzdiskussion und deswegen soviele Beiträge. Aber nein.

Ein Java Anfänger, der offensichtlich weder Google noch ein Java Buch kennt und wegen jeder kleinigkeit hier anffragt.

Wie wäre es mit ein wenig Eigeninitative?

Hier sehe ich aber auch klar die Schuld bei Volvagia. Einsatz in allen Ehren, aber statt hier Fragen zu beantworten würde ich eher Methoden beibringen. Das einzige, was du hiermit erreichst ist die Arbeit von jemand anders zu machen und der checkt es nicht.

==> Buch nehmen und Java lernen. :rtfm:
 
hmm okay. Ich google das mal, und würd sagen bis morgenfür die nächsten anderhalb milliarden Fragen^^
gute Nacht.

mfg Nick

Edit: @Marcinek Ich kenne Google und ich weis auch was Bücher sind, ich lese gerade das Buch
Java von Kopf bis Fuss nebenbei. Aber ich wollte mir mal ein ganz eigenes Programm machen dass
nichts mit dem Buch zu tuhn hat. Mir war fast von Anfang an klar das ich das nich alleine
hinkriege und ich hab damit gerrechnet dass ichs einfach nach ner Zeit ins Eck schmeiß.
Deswegen bin ich auch Volgavia extrem dankbar dass er mir hier so geduldig meine Fragen
erklärt. "Das einzige, was du hiermit erreichst ist die Arbeit von jemand anders zu machen und der
checkt es nicht." .. dankeschön, aber ich kapier es sehr wohl, und das unglaublich gute ist
volgavia ist so nett mir alles zu erklären wenn ich es dann doch mal nicht verstehe.

Auserdem dachte ich das das Forum zum helfen da ist?

Nick
 
Zuletzt bearbeitet:
Also ich habe mir mal einige Beträge hier durchgelesen. Du hast ein Problem. Statt Java basics zu lernen versuchst du hier irgendwas zu machen.. ich weiss nicht was, aber langfristig wird das nix werden...

Zwischen der Antwort des Helfers und deinem ich kapiers nicht liegen manchmal ganze 4 Minuten..

Lies das. Buch mal zu ende und fange an zu googeln.. Dann wirst du sehen, dass Millionen andere die gleichen fragen stellen.

Klar helfen wir... und ich helfe dir auch gerade und viel mehr als super nette Leute die dir jede Losung einfach vor kauen.
 
Sry war wegen schule verhindert. Warum genau mast du dir an mir Probleme zu unterstellen?
Naja mir doch egal was sojemand sagt. Meinen besten Dank an alle die mir wirklich geholfen haben... das sind alle auser Marcinek. Den größten dank natürlich an volgavia.


mfg Nick
 
Marcinek hat recht. Anfangs ging es ja nur darum, dass du ein wenig mit den Objekten durcheinander gekommen bist, dann kam eine Frage nach der anderen und ich habe ohne groß nachzudenken geantwortet.

Das ist eher so, als ob du dividieren lernen würdest, und ich dir zu jeder Aufgabe die Lösung verrate. Klar nerfen Fehler, aber einerseits merkt man sichs, wenn man die Fehler selbst fixt viel eher (keine Tatsache sondern meine Erfahrung), andererseits besteht Programmieren zum Großteil aus dem Eliminieren von Fehlern. (Ebenfalls meine Erfahrung, kann aber auch einfach sein, dass ich nicht gut bin.)

Z. B. hättest du ganz einfach feststellen können warum die Überprüfung des JTextFields auf einen leeren Rückgabewert nicht funktioniert, indem du den Wert ausgibst und so schaust, was tatsächlich zurück kommt, oder einfach mit dem Debugger dort anhältst und die Variablen überprüfst.


Womit ich mit ihm nicht übereinstimme ist, dass das nichts werden kann. Ich hatte zwar schon mit PHP Erfahrung in einer Sprache mit C-Ähnlichen Syntax, hab aber auch mit einer GUI angefangen und nacheinander ergoogelt: "Ich brauche ein Fenster, wie macht man eins?" (extends Frame), "Wie fängt man Tastendrücke ab?" (KeyListener), "Wie gibt man Bilder aus?" (paint(Graphics) überschreiben). Das Ergebnis war ein einfaches kleines Puzzle in dem man Steine auf Kreise schieben musste. Zwar aus heutiger Sicht lächerlich, (nur eine Klasse, Bilder per Toolkit ohne MediaTracker geladen, AWT was zwar nicht schlecht aber auch nicht umbedingt empfehlenswert gegenüber Swing ist usw.), aber dafür, dass ich dazu bloß einen halben Tag gebraucht habe und es mein allererste Java-Projekt war war ich mächtig Stolz auf mich und musste gleich weiter machen.
Deshalb auf jeden Fall weitermachen, mit jeder Zeile Code (auch wenn sie noch so Schwachsinnig wirkt) festigst du, was du weißt. Wenn du dann noch anderen Code aus Tutorials etc. anschaust (CCD oranger Grad: "lesen, lesen, lesen"), siehst du auch neue Sachen die du eventuell nachschlägst und lernst. (So wie ich den MediaTracker bei asynchron ladenden Bildern zu benutzen. ^^)
 
Ich geb ihm natürlich auch recht, ich hab mich jetzt auch wieder an mein buch gesetzt aber ich war ziemlich sauer weil er das ganze doch recht unfreundlich rüber gebracht habe.Und unfreundlichkeit
ist naja eines der wenigen Dinge mit der man mich sauer machen kann
BTw einer der gründer warum ich mal was ohne Buch machen wollte war, ich hab mir Turbo Pascal komplett ohne
Buch bei gebracht und hab das auch recht gut gekonnt für das das ich Grad mal 10 war und
andere in dem Alter zum Teil mit hochfahren überfordert sind^^
Also nochmal ich bin dir extrem dankbar für die Hilfe jetzt in diesem Fred. Seid mich aber sicher nicht
los, ich werd ganz sicher noch einige male hier anfragen.

mfg Nick
 

Neue Themen


Zurück
Oben