Archiv verlassen und diese Seite im Standarddesign anzeigen : Von Klasse auf ein JTextField der GUI-Klasse zugreifen
Hi!
Hab folgendes Problem:
Hab eine Gui-Klasse zB gui in der ich
eingabeFeld = new JTextField(""); und
ausgabeFeld = new JTextField(""); definiert habe.
In einer anderen Klasse zB commands werden die Usereingaben vom eingabeFeld weiterverarbeitet.
Funktioniert alles schön und gut, nur leider kann ich von der Klasse commands nicht den Output auf ausgabeFeld der Gui leiten.
(derzeit nur mit System.out.println() und damit in der Konsole)
Sprich; zur Zeit hab ich eine Eingabe-Gui mit der Ausgabe in der Konsole.
Wie könnte man das am besten lösen?
Danke und mfg leon22
Hi,
zunächst sollte die Klasse commands ausgabeText kennen. Das heisst, du musst der Klasse commands mitteilen, wo ausgabeText ist. Ich weiss jetzt natürlich nicht, wie du das aufgebaut hast.
Am besten postest du mal deinen Code, dann kann man dir besser helfen.
Gruss
Sebastian
GUI:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Squize extends JFrame implements ActionListener
{
JTextField eingabeFeld, ausgabeFeld;
JButton enterButton;
public Squize (String title)
{
super (title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,300);
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
eingabeFeld = new JTextField("");
eingabeFeld.setHorizontalAlignment(SwingConstants. LEFT);
cp.add(eingabeFeld,BorderLayout.NORTH);
enterButton = new JButton("ENTER");
cp.add(enterButton, BorderLayout.CENTER);
enterButton.addActionListener(this);
ausgabeFeld = new JTextField();
ausgabeFeld.setHorizontalAlignment(SwingConstants. RIGHT);
ausgabeFeld.setEnabled(false);
cp.add(ausgabeFeld,BorderLayout.SOUTH);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Commandlinehandler commandlinehandler = new Commandlinehandler();
commandlinehandler.getCommands(eingabeFeld.getText ()); // run the Inputhandler
}
public static void main(String args[])
{
new Squize("Squize");
}
}
Commandlinehandler
(in der ich gerne auf ausgabeFeld von Squize zugreifen würde)
import java.io.*;
import java.lang.Math;
class Commandlinehandler
{
static int square(int n)
{
return n * n;
}
public void getCommands(String input_commands)
{
// String input_first = input_commands.substring(0,1);
// char null_stelle[] = new char[1];
// input_commands.getChars(1, 1+1, null_stelle, 0);
int commands_length = input_commands.length();
char input_commands_char[] = new char[input_commands.length() + 1];
input_commands_char = input_commands.toCharArray(); // copy the whole string to a char array
if(input_commands_char[0] == (char)10)
{
System.err.println("error: wrong command, try 'h' for helpi");
}
else
{
switch (input_commands_char[0])
{
case 's':
if(commands_length != 1 && input_commands_char[1] == ' ')
{
for(int i=2; i<=commands_length-1; i++)
{
if(Character.isDigit(input_commands_char[i]))
{
if(i == commands_length-1)
{
int input_number = Integer.parseInt(input_commands.substring(2));
System.out.println("The Square of " + input_number + ": " + square(input_number));
// Squize.ausgabeFeld.setText("The Square of " + input_number + ": " + square(input_number));
}
}
else
{
System.err.println("usage: e.g. 's 5' (square a number)");
}
}
}
else
{
System.err.println("usage: e.g. 's 5' (square a number)");
}
break;
case 'r':
if(commands_length != 1 && input_commands_char[1] == ' ')
{
for(int i=2; i<=commands_length-1; i++)
{
if(Character.isDigit(input_commands_char[i]))
{
if(i == commands_length-1)
{
int input_number = Integer.parseInt(input_commands.substring(2));
System.out.println("The Square Root of " + input_number + ": " + Math.sqrt(input_number));
}
}
else
{
System.err.println("usage: e.g. 'r 9' (square root a number)");
}
}
}
else
{
System.err.println("usage: e.g. 'r 9' (square root of a number)");
}
break;
case 'h':
System.out.println('\n' + "Help" + '\n' + '\n' + "s ... square a number (e.g. s 5)" + '\n' + "r ... square root a number (e.g. r 9)"
+ '\n' + "q ... quit (exit)" + '\n');
break;
default:
System.err.println("error: wrong command, try 'h' for help");
break;
}
}
}
}
Danke im Voraus !!!
mfg leon22
Also die einfachste Lösung wäre, der Methode getCommands einfach einen Rückgabewert zu verpassen. Dann kannst du den String, den du per System.out.println() an die Konsole schickst, als String zurückgeben und dann in der GUI einfach dem TextFeld zuweisen.
public void actionPerformed(ActionEvent e)
{
Commandlinehandler commandlinehandler = new Commandlinehandler();
ausgabeFeld.setText(commandlinehandler.getCommands (eingabeFeld.getText ())); // run the Inputhandler
}
Ansonsten könntest du der Methode auch eine Referenz auf das Textfeld übergeben.
EDIT: Die Rechtschreibung
Erstmals danke!
Wie würde da die Syntax ausschauen wenn ich eine Referenz auf das TextFeld übergeben will?!
Sind halt die typischen Anfängerfragen ;-)
Danke
mfg leon22
Der Methodenkopf müsste dann wie folgt aussehen:
public void getCommands(String input_commands, JTextField textfeld) {
...
}
Und irgendwo in der Methode kannst du dann einfach mit textfeld.setText(...) den Inhalt des Textfeldes setzen.
Danke, alles klar!
mfg leon22
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.