Swing Text in eine JTextArea schreiben

sirtiger

Mitglied
Hallo Leute,

ich suche jetzt schon seit geraumer Zeit nach einer Lösung. Zuvor habe ich verzweifelt versucht, das Problem eigenständig zu lösen. Leider ohne Erfolg.
Ich habe mir vor einiger Zeit ein kleines Programm mit VB geschrieben, was ich jetzt in Java umsetzen möchte. Nennen wir es Neugier oder Horizonteweiterung.

Mein Problem: Ich möchte gerne einen Text in eine JTextArea schreiben. Das mit einem JButton, der eine "fremde" Klasse aufruft, die es wiederrum über eine Methode an die JTextArea weitergibt.

Hier der Code. Ich nutze NetBeans...

hier die GUI

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mytest;

/**
 *
 * @author Timo
 */
public class TestFrame extends javax.swing.JFrame {

    /**
     * Creates new form TestFrame
     */
    public TestFrame() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(jButton1))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 159, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        TestString.TestTheString();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TestFrame().setVisible(true);
            }
        });
    }
    
    public void PrintMessage (String myMessage) {
        jTextArea1.setText(myMessage);
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration
}


und hier die Beispielklasse:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mytest;

/**
 *
 * @author Timo
 */
public class TestString {
    
    public static void TestTheString () {
            String strString = "Dieser Text soll in die TextArea!";
            TestFrame tf = new TestFrame();
            tf.PrintMessage(strString);
    }
}

Was mache ich nur falsch? Es wird nichts übergeben!!!

Ciao
Timo
 

pro2

Bekanntes Mitglied
Öhm, das Problem ist, dass du dich in deiner Instanz der Klasse TestFrame befindest, dort die Methode der Klasse TestString aufrufst, diese aber wiederum eine neue Instanz der Klasse TestFrame erstellt und dort den Text setzt. In deiner ursprünglichen Instanz passiert also gar nichts.

PS: Wofür willst du so was machen?! Das ganze Konstrukt erscheint erst mal ziemlich sinnfrei.
 

sirtiger

Mitglied
Hmmm,

es soll später so aus sehen, daß ich mehrere Klassen habe. Eine davon ist die Bearbeitung der hsqlDB, die ich in das Projekt integriert habe. In meinem VB Projekt habe ich auch mit mehreren Klassen gearbeitet um nicht den Überblick zu verlieren und um das Ganze programmierfreundlicher zu gestalten.

Die JTextArea agiert als Information für verschiedene Statusmeldungen, was in den einzelnen Klassen ausgeführt wird.

Ich hoffe, Du kommst mit diesem kleinen Überblick zurecht.

Ein kleiner Lösungansatz wäre wünschenswert.


Ciao
Timo


Ich würde diese Instanz auch static machen, damit ich sie in der anderen Klasse aufrufen kann. Leider gibt es dann ein Fehler darin. (non-static variable....)

Java:
    public void static PrintMessage (String myMessage) {
        jTextArea1.setText(myMessage); // non-static variable jTextArea1 cannot be referenced from a static context
    }

Java:
public class TestString {
    
    public static void TestTheString () {
            String strString = "Dieser Text soll in die TextArea!";
            mytest.TestFrame.PrintMessage(strString);
    }
}
 
Zuletzt bearbeitet:

sirtiger

Mitglied
Hallo Leute,

ich habe das jetzt mal geändert...

Java:
import javax.swing.JFrame;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.swing.JTextArea;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.BorderLayout;
/**
 *
 * @author Timo
 */
public class NewGui implements ActionListener {
    
    private JFrame myFrame;
    private JTextArea myTextArea;
    private JButton myButton;
    
    
    public static void main(String[] args) {
        new NewGui();
    }
    
    public NewGui() {
        myFrame = new JFrame("NewGui");
        myTextArea = new JTextArea("");
        myButton = new JButton("Press");
        myButton.addActionListener(this);
            
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setLayout(new BorderLayout());
        myFrame.add(myTextArea,BorderLayout.CENTER);
        myFrame.add(myButton,BorderLayout.SOUTH);
        myFrame.setSize(300,200);
        myFrame.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e) {
        try {
            HSQLDB.main(null);
        } catch (Exception ex) {
            System.err.println(ex);
        }
 
    }
}


Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

/**
 *
 * @author Timo
 */
public class HSQLDB {
    
    public static void main(String[] args) throws Exception {
        try {
            Class.forName("org.hsqldb.jdbcDriver");
            System.out.println("Treiber erfolgreich geladen!");
        } 
        catch (ClassNotFoundException e) {
            System.err.println(e);
        }
        Connection connection = DriverManager.getConnection(
                "jdbc:hsqldb:file:z:/db/verwaltung.db;shutdown=true", "sa", "");
                System.out.println("DB-Datei erfolgreich angelegt!");
                
        createTableTestIfItDoesntExistYet(connection);
       
        connection.close();            
    }

    private static void createTableTestIfItDoesntExistYet(Connection connection) throws Exception {
        ResultSet resultSet = connection.getMetaData().getTables("%", "%", "%", new String[] { "TABLE" });
        int columnCnt = resultSet.getMetaData().getColumnCount();
        boolean shouldCreateTable = true;
            if (columnCnt >= 0) {
                shouldCreateTable = false;
            }

        resultSet.close();
        
            if (shouldCreateTable) {
              Statement statement = connection.createStatement();
              statement.execute("create table data (id int not null, auftragskonto int, buchungstag varchar(6), "
                    + "valutadatum date, buchungstext varchar(200), verwendungszweck varchar(200), beguenstigter varchar(200), "
                    + "kontonummer int, blz int, betrag varchar(10), waehrung varchar(5), info varchar(200), "
                    + "tag int, monat int, jahr int)");
              System.out.println("Tabelle erfolgreich erstellt...");
              statement.close();
            }
    }    

}


Wie muß ich das jetzt anstellen, wenn ich die System.out.'s in der TextArea angezeigt haben will?


Timo
 

sirtiger

Mitglied
Ich schon wieder...

Habe jetzt diesen Code eingefügt und siehe da, es funktioniert.
Leider werde ich aus der ganzen Geschichte nicht schlau...
Das gleiche habe ich auch bei meiner GUI (erstellt duch Netbeans) gemacht... Da funktionierte es nicht...

Warum???

Java:
        Connection connection = DriverManager.getConnection(
                "jdbc:hsqldb:file:z:/db/verwaltung.db;shutdown=true", "sa", "");
                System.out.println("DB-Datei erfolgreich angelegt!");
                NewGui gui = new NewGui(); // neu
                gui.test("TestText");  // neu


Timo
 

sirtiger

Mitglied
Hmmm,

hab jetzt erst gesehen, daß eine zweite GUI geladen wurden... Ist ja auch klar...
Hat denn niemand eine Idee?
Ich kann doch nicht der einzige mit diesem Problem sein?

Timo
 

pro2

Bekanntes Mitglied
Geht es noch um dein ursprüngliches Problem? Eine bessere Struktur kann ich dir da leider nicht geben, da ich mich nicht gerade gut mit grafischen Oberflächen auskenne und hier auch keinen Unfug erzählen will. Wenn du deinen Lösungsansatz weiterverfolgen willst, kannst du das aber so machen:

Java:
import java.awt.HeadlessException;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class GUI1 extends JFrame implements AreaPrinter
{
    JTextArea textArea;
    
    public GUI1() throws HeadlessException
    {
        textArea = new JTextArea();
        this.setSize(300, 300);
        this.add(textArea);
        TextAppender.testTheString(this);
    }
    
    @Override
    public void printMessage(String text)
    {
        textArea.append(text);
    }
    
    public static void main(String[] args)
    {
        new GUI1().setVisible(true);
    }

}

Java:
public class TextAppender
{
    public static void testTheString(AreaPrinter ap)
    {
        String strString = "Dieser Text soll in die TextArea!";
        ap.printMessage(strString);
    }

}

Java:
public interface AreaPrinter
{
    public void printMessage(String text);

}

Das geht dann natürlich mit jeder Klasse, die den AreaPrinter implementiert. Nur mal so als Beispiel, wie das funktionieren würde. Vom Konzept halte ich immer noch nicht viel, aber ich kenne mich dort, wie gesagt, nicht aus. :)
 

sirtiger

Mitglied
Hallo pro2,

das funktioniert gut...
Das ist aber nicht ganz das, was ich suche.
Meine Textarea soll als Ergiegnis Area fungieren. Heißt, es sollen ständig erfolgreiche oder fehlgeschlagene Ereignis angezeigt werden.

In Deinem Beispiel wird der Text von vorn herein initialisiert und dann audgegeben.
Ich brauche eine Ausgabe zur Laufzeit.
Z.B. wenn ich einen Button drücke oder was in der Combo auswähle.


Timo
 

sirtiger

Mitglied
Erst einmal ein Danke an alle, die mich unterstützen.
Ich habe noch ein wenig rum experimentiert, aber leider komme ich zu keinem Ergebnis.

Ich finde es ein wenig merkwürdig, das die direkte Bearbeitung der TextArea per Button mit append() funktioniert.
Die writeText aber nicht, obwohl der String 'textVal' übergeben wird.
Wenn der String übergeben wird, warum führt "jTextArea1.append(textVal);" dann nicht das aus, was "jTextArea1.append("\ndirekte Eingabe 'ohne writeText' über Button mit 'append'");" unter der Button-Action ausführt?

Timo


Java:
package test;

import javax.swing.*;
/**
 *
 * @author Timo
 */
public class Test extends javax.swing.JFrame {

    public Test(String textVal) {
        initComponents();        
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextArea1.setEditable(false);
        jTextArea1.append("Initalisierungstext");
        jTextArea1.setColumns(20);
        jTextArea1.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 232, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 73, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(218, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButton1)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:  
        Test tst = new Test(null);
        String tmp = jTextArea1.getText() + "\n" + "indirekte Eingabe über Button mit 'writeText";
        System.out.println(tmp);
        tst.writeText(tmp);
        jTextArea1.append("\ndirekte Eingabe 'ohne writeText' über Button mit 'append'");
//        Test1.main(null);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Test(null).setVisible(true);
            }
        });
    }
    
   public String receiveText() {
      return jTextArea1.getText();
   }
   
   public void writeText(String textVal) {
      jTextArea1.append(textVal); 
      System.out.print(textVal);
   }
        
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration
}
 

jgh

Top Contributor
evtl. meinst du dieses...????

[java=62] private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// Test tst = new Test(null);
String tmp = jTextArea1.getText() + "\n"
+ "indirekte Eingabe über Button mit 'writeText";
System.out.println(tmp);
writeText(tmp);//auch möglich mit this.writeText(tmp);
jTextArea1
.append("\ndirekte Eingabe 'ohne writeText' über Button mit 'append'");
// Test1.main(null);
}[/code]

ansonsten erzeugst du jedes Mal eine neue GUI, die du nur nicht visible setzt....wenn du das machst, wirst du sehen was passiert.

Java:
	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		Test tst = new Test(null);
		String tmp = jTextArea1.getText() + "\n"
				+ "indirekte Eingabe über Button mit 'writeText";
		System.out.println(tmp);
		tst.writeText(tmp);
		tst.setLocationRelativeTo(null);
		tst.setVisible(true);
		jTextArea1
				.append("\ndirekte Eingabe 'ohne writeText' über Button mit 'append'");
		// Test1.main(null);
	}
 
Zuletzt bearbeitet:

sirtiger

Mitglied
Danke jgh,

hätte ich auch selber drauf kommen können.
Jetzt das ursprüngliche Problem. Wie bekomme ich das jetzt aus einer anderen Klasse hin?


Timo
 

jgh

Top Contributor
durch eine Referenz...hier mal ein MinimalBsp und alles andere als sinnvoll, aber das Prinzip sollte klar werden. Hier übergebe ich dem Frame eine Referenz auf
Code:
IrgendeineAndereKlasseEvtlAuchImAnderenPacket
und nutze die get-Methode die nichts weiter macht, als eine Zahl zu inkrementieren.

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

class IrgendeineAndereKlasseEvtlAuchImAnderenPacket {
	private int einTollerZaehler = 0;

	public int getEinTollerZahler() {
		einTollerZaehler++;
		return einTollerZaehler;
	}
}

/**
 * 
 * @author Timo
 */
public class Test extends javax.swing.JFrame {
	private IrgendeineAndereKlasseEvtlAuchImAnderenPacket ia;

	public Test(String textVal, IrgendeineAndereKlasseEvtlAuchImAnderenPacket ia) {
		this.ia = ia;
		initComponents();
	}

	@SuppressWarnings("unchecked")
	// <editor-fold defaultstate="collapsed" desc="Generated Code">
	private void initComponents() {

		JButton b = new JButton("+");
		final JLabel l = new JLabel();
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				l.setText(ia.getEinTollerZahler() + "");
			}
		});
		JPanel p = new JPanel();
		p.add(b);
		p.add(l);
		add(p, BorderLayout.NORTH);
		pack();
	}// </editor-fold>

	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		String tmp = jTextArea1.getText() + "\n"
				+ "indirekte Eingabe über Button mit 'writeText";
		System.out.println(tmp);
		writeText(tmp);
		jTextArea1
				.append("\ndirekte Eingabe 'ohne writeText' über Button mit 'append'");
		// Test1.main(null);
	}

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String args[]) {
		/* Set the Nimbus look and feel */
		// <editor-fold defaultstate="collapsed"
		// desc=" Look and feel setting code (optional) ">
		/*
		 * If Nimbus (introduced in Java SE 6) is not available, stay with the
		 * default look and feel. For details see
		 * [url=http://download.oracle.com
		 * /javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look
		 * and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing >
		 * Modifying the Look and Feel)[/url]
		 */
		try {
			for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
					.getInstalledLookAndFeels()) {
				if ("Nimbus".equals(info.getName())) {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
					break;
				}
			}
		} catch (ClassNotFoundException ex) {
			java.util.logging.Logger.getLogger(Test.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (InstantiationException ex) {
			java.util.logging.Logger.getLogger(Test.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (IllegalAccessException ex) {
			java.util.logging.Logger.getLogger(Test.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (javax.swing.UnsupportedLookAndFeelException ex) {
			java.util.logging.Logger.getLogger(Test.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		}
		// </editor-fold>

		/* Create and display the form */
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new Test(null,
						new IrgendeineAndereKlasseEvtlAuchImAnderenPacket())
						.setVisible(true);
			}
		});
	}

	public String receiveText() {
		return jTextArea1.getText();
	}

	public void writeText(String textVal) {
		jTextArea1.append(textVal);
		System.out.print(textVal);
	}

	// Variables declaration - do not modify
	private javax.swing.JButton jButton1;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JTextArea jTextArea1;
	// End of variables declaration
}
 

hasso

Mitglied
Jetzt das ursprüngliche Problem. Wie bekomme ich das jetzt aus einer anderen Klasse hin?

Events.

Die Klassen sollten die GUI gar nicht kennen. Es ist kein gutes Design wenn jede Klasse eine Referenz des GUI-Objekt hält und darin rumfummelt. Weil willst du die GUI irgendwann mal austauschen musst du in jeder deiner Klasse Änderungen vornehmen.

Stattdessen definiere in den Klassen ein Event, welches gefeuert wird wenn ein neuer Status da ist. Die GUI abonniert dieses Event und holt sich dann entsprechend den Status ab um ihn anzuzeigen oder er kommt schon im Event mit.

Das fände ich die sauberste Lösung.
 

jgh

Top Contributor
@ hasso
klar, grundsätzlich hast du Recht! Ob das nun Events sein müssen, oder imho noch saubere Lösungen gegen Interfaces mit dem MVC- und/oder Observer-Patterns, ist eine Glaubensfrage.

Die Grundfrage war, wie kann ich aus irgendeiner Klasse Daten einer anderen Klasse nutzen...und da bieten sich Referenzen als erster Schritt an. Wenn du dir den Code des TO anschaust, sollte man m.E. nicht gleich mit Kanonen auf Spatzen schießen ;)
 

hasso

Mitglied
Ich wollte auch gar nicht sagen das du Unrecht hast ;)

Ich wollte es nur mal in den Raum werfen weil es zumindest im Unterton so klang als würde das ein mittelgroßes bis größeres Projekt werden, vlt auch etwas das irgendwo zum Einsatz kommen soll und gewartet werden will/muss. Da muss man dann Aufwand/Nutzen abschätzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Text in eine txt-Datei schreiben und abspeichern! Allgemeine Java-Themen 8
S Text an einer beliebigen Stelle in eine Datei anfügen Allgemeine Java-Themen 8
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
M Thymeleaf th value und th text Allgemeine Java-Themen 1
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
_user_q Eingegebenen Text wiederholt schreiben lassen Allgemeine Java-Themen 9
G Darstellung von Text auf MapContext von GeoTools Allgemeine Java-Themen 2
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
izoards Bestimmter Text aus PDF extrahieren Allgemeine Java-Themen 3
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
K HTMLEditor HTML Text in Rich Text umwandeln Allgemeine Java-Themen 14
kodela JDialog zeigt Text nicht an Allgemeine Java-Themen 5
L Text filtern Allgemeine Java-Themen 1
Bluedaishi TEXT Kodierung Allgemeine Java-Themen 3
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
S Ini Text aus String parsen Allgemeine Java-Themen 1
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
I Text suchen und ersetzen im Word Dokument Allgemeine Java-Themen 3
windl Text mining / deep learning Allgemeine Java-Themen 0
I Text aus Input-Box entnehmen und zuweisen Allgemeine Java-Themen 1
KeexZDeveoper Text Mining Allgemeine Java-Themen 3
L Input/Output Wie kann man in der Konsole einen Text farbig ausgeben z.b in grün Allgemeine Java-Themen 6
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
A Datenexport (Text und Draw) Allgemeine Java-Themen 1
L Text von txt auf JTextArea Allgemeine Java-Themen 4
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T itext: text in ein textfeld hinzufügen Allgemeine Java-Themen 2
B Farbiger Text in der Konsole Allgemeine Java-Themen 1
K Pdf mit dynamischem Text mit iText Allgemeine Java-Themen 0
D Text Analyzer Allgemeine Java-Themen 2
RalleYTN Audiodatein(.ogg/.wav) in Text konvertieren Allgemeine Java-Themen 0
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
S Text in mehreren Sprachen korrekt darstellen? Wie waehle ich die Fonts aus..? Allgemeine Java-Themen 0
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
M Text in erstelltes Excelfile schreiben Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
P HTML Text bearbeiten Allgemeine Java-Themen 1
B JFrame Text Ausgabe Allgemeine Java-Themen 7
G Makierter Text in Arbeitsspeicher Allgemeine Java-Themen 2
B Text in die Mitte der Konsole schreiben. Allgemeine Java-Themen 1
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
P iText Text zentrieren Allgemeine Java-Themen 3
J Verschlüsselung von Text? Allgemeine Java-Themen 2
M Text datei in java jar datei einbinden Allgemeine Java-Themen 4
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
S Robuste Methode um Text von HTML code zu extrahieren..? Allgemeine Java-Themen 6
achillesat Rich Text Editor Allgemeine Java-Themen 2
M CMD-Text anzeigen Allgemeine Java-Themen 10
G Text Mining Allgemeine Java-Themen 7
B Text auf Standarddrucker drucken Allgemeine Java-Themen 3
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
nrg Find and replace Text docx Allgemeine Java-Themen 6
M Ein bestimmtes Wort in einem Text zählen (String in String) Allgemeine Java-Themen 9
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
M Funktion gesucht: Text vektorisieren Allgemeine Java-Themen 20
D Wort in Text mit >100.000 Wörter finden Allgemeine Java-Themen 7
B Text wird nicht richtig angezeigt Allgemeine Java-Themen 9
Q Text Datei einlesen Allgemeine Java-Themen 27
N .doc text ändern Allgemeine Java-Themen 12
R Komponente hat nicht die gesetzten Eingeschaften (Text, Farbe) Allgemeine Java-Themen 3
M NOA an den Source Text des Dokumentes kommen Allgemeine Java-Themen 7
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
A Umwandlung von Text/Zeichen in Polynome Allgemeine Java-Themen 8
Y Eclipse ppt Folie erzeugen + text plazieren Allgemeine Java-Themen 4
cedi Eingegebenen Text in der Konsole nicht sichtbar machen oder nur in Sternchen anzeigen Allgemeine Java-Themen 2
D markierten Text kopieren Allgemeine Java-Themen 2
P Doppeltverkettete Listen + Text Allgemeine Java-Themen 5
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
C Datei als ASCII text einlesen ? Allgemeine Java-Themen 16
R Texterkennung - Text aus einem/r Bild/Grafik auslesen Allgemeine Java-Themen 2
M String in Html Text umwandeln Allgemeine Java-Themen 2
T eingefügter Text nach dem rendern spiegelverkehrt Allgemeine Java-Themen 2
lumo encoding einer text-datei Allgemeine Java-Themen 2
E Text ans Ende einer Textdatei anfügen Allgemeine Java-Themen 2
E JTextArea / JEditorPane + Text formatieren Allgemeine Java-Themen 3
R Java Text anderer Schriftart einlesen Allgemeine Java-Themen 2
A AES Key aus Text erzeugen Allgemeine Java-Themen 2
S Koordinaten aus einem Text filtern Allgemeine Java-Themen 11
turmaline Text aus Web-Seiten auslesen Allgemeine Java-Themen 1
MQue Graphics2D Text Allgemeine Java-Themen 2
U Text verschmelzen Allgemeine Java-Themen 8
martin82 Java-Code aus Text-Datei parsen Allgemeine Java-Themen 3
W Text curser auswählen für Paste Allgemeine Java-Themen 15
G HTML-Datei einlesen, Plain Text in Textfile speichern Allgemeine Java-Themen 4
S Bestes Text file encoding..? Allgemeine Java-Themen 36
B UTF-8 Text Allgemeine Java-Themen 3
H Passwortgschützter Text Allgemeine Java-Themen 13
C IReport Feldberechnen und als Text ausgeben Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben