Stringübergabe in Folgeklasse

Status
Nicht offen für weitere Antworten.

rexton

Neues Mitglied
Hallo,

hab ein Problem (Hab Suche und FAQ benutzt, mir schon einiges zusammengebastelt :rtfm:), aber jetzt steh ich an und komm nimma weiter ;(

Es geht simpel darum, einen String in einem Textfeld einzulesen und über Drücken des Buttons "Weiter" den in einem neuen Fenster wieder auszugeben, unter der Bedingung, dass er auf eine Variable gespeichert wird. Ich soll vielleicht noch erwähen, dass ich die Ausgabe nur schnell in der Konsole erledigt hab bzw. das versuche...

Zur Aufgabenstellung noch:
Von unserem Prof. haben wir die Anweisung erhalten, Eclipse und Jigloo zu verwenden.

Noch zu mir: studier Maschinenbau, AWL und Koop beim SPS-Programmiern kann ich, allerdings stoss ich bei Java an meine Grenzen :oops:

Folgendes hab ich bis jetzt (ich hoff, das sind wirklich die relevanten Teile...):

Eingabefenster:
Java:
	.....
                private AbstractAction getForwardAction() {
		if(forwardAction == null) {
			forwardAction = new AbstractAction("Weiter", null) {
				public void actionPerformed(ActionEvent evt) {
					getInput();
					NewJFrame1 nextframe = new NewJFrame1();
					nextframe.setVisible(true);
					dispose();
				}
			};
		}
		return forwardAction;
	}
	
	public String getInput()
	{
		String s = textField.getText();
		System.out.println(s);
		return s;
	}

}

von dem weis ich, dass es funktioniert. Nach "Weiter"-Drücken geht die Konsole auf.
Jetzt noch der Teil, der nicht funkt:

Java:
	.....
               public void output ()
	{	
		NewJFrame nextFrame = new NewJFrame();
		getOutput = nextFrame.getInput();
		System.out.println(getOutput);
		
	}

}

Hab jetzt wie gesagt nur die Codesegmente gepostet, welche ich programmiert hab.
Den Rest hab ich via Jigloo gemacht.

Bitte um Eure Hilfe,
Gruß
 

Tobias

Top Contributor
Sieht so aus, als würdest du ein neues Objekt NextFrame erzeugen und dir von da den Input holen. Das funktioniert so nicht. Wenn ich die Zigaretten aus meinem Auto holen will, kauf ich ja auch nicht nen Neuwagen.

mpG
Tobias

P.S.: Genaues läßt sich allerdings nur mit dem vollständigen Code sagen.
 

sliwalker

Top Contributor
Pflichte meinem Vorredner bei.

Du hast bislang eine Klasse NewJFrame und NewJFrame1. In welcher ist was vorhanden? Wie sieht die main aus?
Ohne kompletten Code musst Du mindestens genauer beschreiben, wie die Situation aussieht.

greetz
SLi
 

rexton

Neues Mitglied
erst mal danke, dass Ihr euch meiner annehmt...

Anbei die kompletten Codes:

NewJFrame (beinhaltet Button und Textfeld):

Java:
package gui;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class NewJFrame extends javax.swing.JFrame {
	private JButton forward;
	private JTextField textField;
	private AbstractAction forwardAction;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				NewJFrame inst = new NewJFrame();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public NewJFrame() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			GroupLayout thisLayout = new GroupLayout((JComponent)getContentPane());
			getContentPane().setLayout(thisLayout);
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				forward = new JButton();
				forward.setText("Weiter");
				forward.setAction(getForwardAction());
			}
			{
				textField = new JTextField();
				textField.setText("Eingabe");
			}
			thisLayout.setVerticalGroup(thisLayout.createSequentialGroup()
				.addContainerGap()
				.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				.addGap(0, 67, Short.MAX_VALUE)
				.addComponent(forward, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				.addContainerGap());
			thisLayout.setHorizontalGroup(thisLayout.createSequentialGroup()
				.addContainerGap()
				.addGroup(thisLayout.createParallelGroup()
				    .addGroup(GroupLayout.Alignment.LEADING, thisLayout.createSequentialGroup()
				        .addComponent(textField, GroupLayout.PREFERRED_SIZE, 107, GroupLayout.PREFERRED_SIZE)
				        .addGap(0, 65, Short.MAX_VALUE))
				    .addGroup(GroupLayout.Alignment.LEADING, thisLayout.createSequentialGroup()
				        .addGap(0, 91, Short.MAX_VALUE)
				        .addComponent(forward, GroupLayout.PREFERRED_SIZE, 81, GroupLayout.PREFERRED_SIZE)))
				.addContainerGap());
			pack();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
	}
	
	private AbstractAction getForwardAction() {
		if(forwardAction == null) {
			forwardAction = new AbstractAction("Weiter", null) {
				public void actionPerformed(ActionEvent evt) {
					getInput();
					NewJFrame1 nextframe = new NewJFrame1();
					nextframe.setVisible(true);
					dispose();
				}
			};
		}
		return forwardAction;
	}
	
	public String getInput()
	{
		String s = textField.getText();
		System.out.println(s);
		return s;
	}

}

NewJFrame1 (da soll nur was ausgegeben werden, in der Konsole):

Java:
package gui;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

public class NewJFrame1 extends javax.swing.JFrame {

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				NewJFrame1 inst = new NewJFrame1();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	private String getOutput = new String ("");
	
	public NewJFrame1() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void output ()
	{	
		NewJFrame nextFrame = new NewJFrame();
		getOutput = nextFrame.getInput();
		System.out.println(getOutput);
		
	}

}

Wie gesagt, die beiden Codes.
Bitte um Durchsicht :autsch:
 

sliwalker

Top Contributor
Hoi,

mir fallen da ein paar Sachen auf:

1. JFrames werden automatisch in einem Thread gestartet. Das brauchst Du nicht exra machen. Einfach setVisible(true) und gut.
2. benutz besser WindowConstants.EXIT_ON_CLOSE, sonst bleibst die Anwendung im Speicher.
3. Du brauchst nicht wirklich zwei Klassen. Die output-Methode kann auch in NewJFrame liegen.
4. Du hast die Aufgabenstellung nicht verfolgt. Dein Text wird wenn überhaupt vom ersten Fenster ausgegeben. Eine Übergabe des Wertes findet nirgends statt.
5. Was Du brauchst nennt sich parametrisierter Konstruktor. Erstell im Event ein neues Fenster, übergibt den Wert, speicher es im Objekt und ruf auf dem Objekt die output-Methode auf.

greetz
SLi
 

Schandro

Top Contributor
1. JFrames werden automatisch in einem Thread gestartet. Das brauchst Du nicht exra machen. Einfach setVisible(true) und gut.
Imho falsche Aussage, da man eigentlich alle Methoden die ein Swing Object verändert im Event Dispatch Thread starten soll.
2. benutz besser WindowConstants.EXIT_ON_CLOSE, sonst bleibst die Anwendung im Speicher.
Grundsätzlich zwar ne gute Idee, man sollte sich aber nicht daran gewöhnen. Spätestens bei Multithreading-Programmen kanns dadurch Probleme geben (wenn z.b. über nen Stream grad ne Datei geschrieben wird, das Programm aber währenddessen wie bei System.exit() abgeschossen wird)
 
Zuletzt bearbeitet:

sliwalker

Top Contributor
Hi Schandro,

soviel Swing-Programmierung mache ich nicht. Heißt, das Frame mittels invokeLater zu starten ist Gang und Gebe? Mein letzter Stand war das was ich sagte. Ist also updated?

EXIT_ON_CLOSE ist sicherlich nicht die Lösung für "richtige" Programme. Aber ich kenne es von mir damals, dass nach zwanig Mal starten irgendwann der Speicher voll ist und 20 jawa-Prozesse im Speicher stehen. Also wenn schon WindowConstants, dann EXIT_ON_CLOSE.

Immer die Profi-Lösung zu präsentieren ist nicht immer der richtige Weg. Man muss es halt auf das Beispiel übertragen, nicht?

greetz
SLi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Stringübergabe von JAVA nach C++ Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben