Klassen JTextfield aus anderer Klasse herausfüllen

PapstbenR

Mitglied
Hallo,

ich möchte gerne aus einer anderen Klasse heraus ein Textfield befüllen, jedoch möchte ich objektorientiert arbeiten und das Textfield nicht auf public setzen.

Aufbau:

1. Klasse "gui"
- hier werden die Textfields erzeugt
Java:
JTextField textField = new JTextField("");
textField.setBounds(x, y, 40, 40);
textField.setForeground(Color.BLACK);
textField.setFont(font);
textField.setVisible(true);
sudokuField[i] = textField;


2. Klasse "input"
- hier soll eine Methode sein, die ein Textfield ändert
Java:
Board myBoard = new Board();
myBoard.sudokuField[1].setText("");


Mir fehlt gerade ein bisschen der Plan, wie ich auf die Textfields zugreifen kann. Kann mir da jemand weiterhelfen?
 
Zuletzt bearbeitet:
Moin,

jedoch möchte ich objektorientiert arbeiten und das Textfield nicht auf public setzen.
???:L

1. Klasse "gui"
- hier werden die Textfields erzeugt

2. Klasse "input"
- hier soll eine Methode sein, die ein Textfield ändert

Mir fehlt gerade ein bisschen der Plan, wie ich auf die Textfields zugreifen kann. Kann mir da jemand weiterhelfen?
wenn Du direkt ansprechen willst, sollte es schon public sein.

Andernfalls musst Du Dir eine Art Getter-/Setter-Methoden bauen, über die Du dann das Feld befüllst!

Gruß
Klaus
 
Wie wäre es mit

Java:
public class Foo
{
	private String a="";
	
	public static void main(String[]args)
	{
		Foo eins = new Foo();
		eins.setString("Hallo Welt"); // <- Hier würdest du dann den Text für dein Textfield setzen.
		eins.out();
		
	}
	public void setString(String a) 
	{
		this.a = a;
	}
	public void out()
	{
		System.out.println(this.a);
	}
}

nur das du ebend nicht sysout. nutzt sonder die setText Methode deines TextFields, dein TextField muss halt einfach referenziert sein , dann rufst du in der Instanz deines Textfields einfach die setString Methode auf und setzt so den Text ?!
 
Zuletzt bearbeitet:
Moin,

da hatte sich wohl Dein EDIT mit meiner Antwort überschnitten ...

Hallo,

ich möchte gerne aus einer anderen Klasse heraus ein Textfield befüllen, jedoch möchte ich objektorientiert arbeiten und das Textfield nicht auf public setzen.

Aufbau:

1. Klasse "gui"
- hier werden die Textfields erzeugt
Java:
JTextField textField = new JTextField("");
textField.setBounds(x, y, 40, 40);
textField.setForeground(Color.BLACK);
textField.setFont(font);
textField.setVisible(true);
sudokuField[i] = textField;


2. Klasse "input"
- hier soll eine Methode sein, die ein Textfield ändert
Java:
Board myBoard = new Board();
myBoard.sudokuField[1].setText("");
Mir fehlt gerade ein bisschen der Plan, wie ich auf die Textfields zugreifen kann. Kann mir da jemand weiterhelfen?
Du greifst doch mit
Java:
myBoard.sudokuField[1].setText("");
drauf zu .....

Die Frage ist eher wie "Board" ausschaut ....
In "GUI" kannst Du natürlich SO nicht draufzugreifen, sondern grundlegend nur so wie in "input", wobei Du dann ein neues lokales (und somit nur dort bekanntes) Objekt erzeugst !!

Wird "Board" noch woanders (globaler) erzeugt?
Dann könntest Du einfach das entsprechende Objekt an die betroffenen Klassen übergeben !

Gruß
Klaus
 
das hier würde auch funktionieren, auf nicht statischem wege:

Foo.java
Java:
public class Foo
{
	private String a="";
	
	public static void main(String[]args)
	{
		Foo neu = new Foo();
		neu.start("Hallo Welt");
		neu.out();
	}

	public void start(String b) {
		
		this.a = new Bar().setString(b); // Hier rufst du die Methode der anderen klasse auf 
	}

	public void out()
	{
		System.out.println(this.a);
	}
}

Bar.java
Java:
public class Bar {
	

	public String setString(String a)
	{
		return a;
	}
	
}

falls du jetzt den String in der Klasse Bar setzen wollen würdest wäre dies auch kein Problem , es ging hier jetzt nur darum wie du auf einem Object der klasse Foo eine Methode der Klasse Bar aufrufen kannst

Das ginge in dem du z.B die Methode der klasse Bar so gestaltest

Java:
public class Bar {
	

	public String setString()
	{
		return "oh mein gott es funktioniert !";
	}
	
}

dann musst du natürlich den Parameter bei setString() leer lassen , da dir ja de Methode einen vorher festgelegten String zurück gibt.
 
Zuletzt bearbeitet:
das hier würde auch funktionieren, auf nicht statischem wege:

Foo.java
Java:
public class Foo
{
	private String a="";
	
	public static void main(String[]args)
	{
		Foo neu = new Foo();
		neu.start("Hallo Welt");
		neu.out();
	}

	public void start(String b) {
		
		this.a = new Bar().setString(b);
	}

	public void out()
	{
		System.out.println(this.a);
	}
}

Bar.java
Java:
public class Bar {
	

	public String setString(String a)
	{
		return a;
	}
	
}
hää?
Ich bekomme den String zurück, den ich an "setString" übergebe 😱 ???:L

Warunm dann nicht gleich :
Java:
public void start(String b) 
{
    this.a = b;
}
???:L

Gruß
Klaus
 
es ging grad lediglich darum wie er eine Methode aus einer anderen klasse aufrufen kann, natürlich würde ich den String dann in der Klasse Bar festlegen,

hier ging es nur darum zu zeigen das er eine private Klassenvariable über eine Methode einer anderen Klasse ändern kann.

[EDIT]Da war ich grad mit dem Edit noch nicht durch ^^[/EDIT]
 
Zuletzt bearbeitet:
Vielleicht ist es so etwas übersichtlicher


Foo.java
Java:
public class Foo
{
	private String a="";
	
	public static void main(String[]args)
	{
		Foo neu = new Foo(); // neues Foo object
		neu.start(); // start Methode auf aktuellem Foo Object
		neu.out(); // out Methode auf aktuellem Foo Object
	}

	public void start() {
		
		this.a = new Bar().setString(); // erhält den String der in der Methode setString der Klasse Bar festgelegt ist und speichert diesen in der privaten Klassenvariable a
	}

	public void out()
	{
		System.out.println(this.a); // gibt a aus
	}
}

Bar.java
Java:
public class Bar {
	

	public String setString()
	{
		return "oh mein gott es funktioniert !";
	}
	
}
 
Zuletzt bearbeitet:
Also ich glaube ich bin grad ein bisschen auf den Kopf gefallen. Ich zeig euch nochmal ein vernünftiges Beispiel:

Sudoku
Java:
/**
 * 
 */
package gui;

/**
 * @author 
 *
 */
public class Sudoku {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Window myWindow = new Window(700,520,"Sudoku-Projekt");
		ButtonNewPuzzle newPuzzle = new ButtonNewPuzzle(500, 10, 170, 20, "Rätsel speichern");
		
		myWindow.createWindow();
		newPuzzle.createButton();
			
	}

}

Window
Java:
/**
 * 
 */
package gui;

import javax.swing.JFrame;

/**
 * @author 
 *
 */

public class Window {
	
	public JFrame Board = new JFrame();
	private int x;
	private int y;
	private String title;

	public Window(int x,int y,String title) {
		this.x = x;
		this.y = y;
		this.title = title;
	}
	
	public void createWindow(){
	
	Board.setTitle(title);
	Board.setLayout(null);
	Board.setSize(x, y);
	Board.setResizable(false);
	Board.setVisible(true);
	}
	
}

ButtonNewPuzzle
Java:
/**
 * 
 */
package gui;

import javax.swing.JButton;

/**
 * @author 
 *
 */
public class ButtonNewPuzzle {
	
	private int x;
	private int y;
	private int height;
	private int width;
	private String title;

	public ButtonNewPuzzle(int x, int y, int height, int width, String title) {
		this.y = y;
		this.height = height;
		this.width = width;
		this.title = title;
	}
	
	public void createButton(){
		JButton NewPuzzle = new JButton(title);
		NewPuzzle.setBounds(x, y, width, height); 
		Board.getContentPane().add(NewPuzzle);
	}
}

Das Problem liegt jetzt an der Definition von Board (dem JFrame). Als Fehlermeldung bekomme ich:
"Board cannot be resolved".
 
Zuletzt bearbeitet:
Moin,

WO genau kommt denn die Meldung ???:L

Ich vermute mal stark in der Methode "createButton", oder ?
Was aber auch klar ist, da deine Klasse "ButtonNewPuzzle" kein "board" kennt!
"board" ist nur lokal in der Klasse "Window" bekannt !

Du muss dann qualifizierend draufzugreifen!

Warum willst Du überhaupt die Button fürs Fenster in einer eigenen Klasse abhandeln ???:L

Gruß
Klaus
 
Zuletzt bearbeitet:
Der Fehler kommt in folgender Zeile:

Java:
Board.getContentPane().add(NewPuzzle);

Die Buttons pack ich in eine Klasse, weil ich dachte, dass man so eine bessere Wartbarkeit und Erweiterbarkeit erreicht. Oder würde es mehr Sinn machen, die in die Klasse "Window" zustecken und in einer Klasse Board, dann die Erstellung von den Textboxen?

Qualifiziert drauf zugreifen heißt, ich würde eine Methode in der Klasse Window erstellen, die die Buttons anlegt oder?
 
Zuletzt bearbeitet:
Ganz ehrlich, ich würde GUI und Gamelogik so gut es geht trennen.
In der Window-Klasse das ganze Feld initialisieren, ActionListener hinzufügen und über diese Actionlistener Methoden des Boards aufrufen, um Änderungen vorzunehmen. Board bietet dann die Schnittstelle zwischen GUI (Actions) und dem Spiel selber...
 

Zurück
Oben