System.out.println zu JTextArea

verAPPelt

Mitglied
Guten Tag liebe Community,
ich habe eine Konsolenanwendung (mit vielen einzelnen Textausgaben; vor allem mit Variablen) und möchte nun eine GUI daraus machen. Hab ich auch getan, hab das Frame ausgelagert.
So, nun mein Problem: Wie kann ich mit JTextArea die Sysouts "artgerecht" ersetzen, die in meiner "Haupt"-Klasse sind?

Vielen Dank, LG
 
Zeig uns doch mal dein Code oder ist der top-secret?
Man kann jetzt nur raten was genau du machst.
Sicherlich erstellst du in deiner Klasse mit den Konsolenausgaben ein neues GUI Objekt. Über Getter könntest du so auf die JTextArea zugreifen und den Text setzen.
Aber wie gesagt: das ist ins blaue geraten.
 
Code:
import java.awt.Font;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Frame extends JFrame{
	
	JLabel text;
	JButton button;
	JTextField eingabe;
	TextArea t;
	
	public Frame(){
		setVisible(true);
		setSize(800, 600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
		setLocationRelativeTo(null);
		setTitle("Magische Quadrate");
		setLayout(null);
		
		text = new JLabel("Magische Quadrate");
		text.setBounds(20, 5, 500, 30);
		Font schrift = (text.getFont().deriveFont(Font.BOLD,15));
		text.setFont(schrift);
		text.setToolTipText("Bitte Ordnung eingeben!");
		add(text);
		
		t = new TextArea("adf", 3, 20);
		add (t);
		
		button = new JButton("Zum Starten klicken!");
		button.setBounds(300, 200, 200, 40);
		button.addActionListener(new Listener());
		button.setEnabled(false);
		button.setToolTipText("Auswahl der neuen Ordnung bestätigen");
		add(button);
		
		eingabe = new JTextField();
		eingabe.setBounds(180, 80, 500, 100);
		eingabe.addCaretListener(new CursorListener());
		eingabe.setToolTipText("Ordnung hier eingeben!");
		add(eingabe);
	}
	private class Listener implements ActionListener{
				
		
		@Override
		public void actionPerformed(ActionEvent e) {
			text.setText("Ordnung " + eingabe.getText());
			
			
		}

	}
	private class CursorListener implements CaretListener{

		@Override
		public void caretUpdate(CaretEvent arg0) {
			String s = eingabe.getText();
			s = s.trim();
			if(s.isEmpty()){
				button.setEnabled(false);
			}else{
				button.setEnabled(true);			}
				
			
		}

	
	}
	

}

Das ist meine GUI-Class, die andere Class wäre zu kompliziert, schematisch wäre die so:

Code:
import java.util.Scanner;

import javax.swing.JFrame;

public class Programm {
	
	
	public static void main(String args[]){
		JFrame jf= new Frame();
		jf.setVisible(true);
		
		
		Scanner scan = new Scanner(System.in);
sysout("Bitte Zahl eingeben")
//dann halt scanner etc.etc.

//Ausführen von Rechenoperationen mit Ausgabe von sysouts

LG
 
Bzw habe ich das jetzt in eine Class gepackt und da muckt Eclipse beim add rum, dass: Cannot make a static reference to the non-static method add(Component) from the type ContainerCannot make a static reference to the non-static method add(Component) from the type Container

Hier mein Code:
Code:
import java.awt.Font;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;


public class MagQuadAnwendung extends JFrame {
	JFrame jf = new JFrame();
	JLabel text;
	JButton button;
	JTextField eingabe;
	TextArea t;
	public MagQuadAnwendung(){
		
		setVisible(true);
		setSize(800, 600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
		setLocationRelativeTo(null);
		setTitle("Magische Quadrate");
		setLayout(null);
		
		text = new JLabel("Magische Quadrate");
		text.setBounds(20, 5, 500, 30);
		Font schrift = (text.getFont().deriveFont(Font.BOLD,15));
		text.setFont(schrift);
		text.setToolTipText("Bitte Ordnung eingeben!");
		add(text);
		
		t = new TextArea("adf", 3, 20);
		add (t);
		
		button = new JButton("Zum Starten klicken!");
		button.setBounds(300, 200, 200, 40);
		button.addActionListener(new Listener());
		button.setEnabled(false);
		button.setToolTipText("Auswahl der neuen Ordnung bestätigen");
		add(button);
		
		eingabe = new JTextField();
		eingabe.setBounds(180, 80, 500, 100);
		eingabe.addCaretListener(new CursorListener());
		eingabe.setToolTipText("Ordnung hier eingeben!");
		add(eingabe);
	}
	private class Listener implements ActionListener{
				
		
		@Override
		public void actionPerformed(ActionEvent e) {
			text.setText("Ordnung " + eingabe.getText());
			
			
		}

	}
	private class CursorListener implements CaretListener{

		@Override
		public void caretUpdate(CaretEvent arg0) {
			String s = eingabe.getText();
			s = s.trim();
			if(s.isEmpty()){
				button.setEnabled(false);
			}else{
				button.setEnabled(true);			}
				
			
		}

	
	}
	
	
	
	
	
	public static void main(String args[]){
		new MagQuadAnwendung();
		TextArea t;
		t=new TextArea("das",3,20);
		add(t);

Irgendwelche Ideen? Danke
 
Danke dir.

Vor ab mal ein paar Anmerkungen:
- Code bitte immer in [code=Java]MY CODE [/code] Tags posten. So kann sich den Code besser anschauen und zitieren
- In deinem Fall sollte die Frame Klasse nicht von JFrame erben, da du die Funktionalität von JFrame nicht erweitern willst - du willst sie nur nutzen. Es reicht wenn du eine Instanz von JFrame erstellst.
- Vermeide die setBounds() Methode und setLayout(null); zu verwenden. Lies dich lieber in LayoutManager ein.
- Du vermischst hier AWT mit Swing. (JFrame, TextArea,..)

Nun zu deinem Problem:

In deiner Frame Klasse kannst du dir einen Getter für die JTextArea erstellen
Java:
public JTextArea getJTextArea() { return t; }

Über deine jf Instanz kannst dann auf die JTextArea zugreifen: jf.getJTextArea().append(...);

Gruß
Robert
 

Neue Themen


Zurück
Oben