Problem mit Objekttransfer

chrismass

Mitglied
Hallo JCommunity;

Ich habe ein (wahrscheinlich typisches Anfänger-) Problem mit der Übergabe eines Objekts.

Ich habe eine Anwendung, in der zwei JPanels (p1 und p2) positioniert sind. p1 enthält einen Button. p2 ist zu Beginn noch leer. Sobald ich auf p1 drücke, soll soll sich ein neues Dialogfenster öffnen. Dieses neue Fenster enthält einen kleinen Editor, welcher wiederum unter anderem eine JTextArea enthält. In diesem Editor soll man vorerst ganz einfachen Text schreiben können. Im Editor ist ein Button integriert, der den Dialog wieder schließt. Ich möchte nun, dass beim schließen der String aus dem Editor ausgelesen wird, dann auf p2 eine (schreibgeschützte) JTextArea erscheint und der String dort hineingeschrieben wird.
Zur Lösung habe ich mir ein TextTransferObject (TTO) geschrieben. Dieses soll im Editor "befüllt" und anschließend wieder ausgewertet werden. Hierzu habe ich in TTO eine String Variable und entsprechende Get und Set Methoden geschrieben.
Leider funktioniert es nicht. Habe festgestellt, dass die Variable im Objekt nicht geschrieben wird.
Der default Wert "neuer Text..." wird jedoch ausgelesen und iin die Textarea geschrieben und zu p2 geadded.
Ich bekomme keine Fehlermeldung.


dies ist meine Testanwendung mit den panels:

Code:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class TestFrame extends JFrame implements ActionListener{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		TestFrame frame = new TestFrame();
		frame.setLocation(100, 100);
		frame.setSize(500, 300);
		frame.setVisible(true);

	}
	
	private TextTransferObject TTO;
	private Editor edit;
	
	public JPanel p1 = null;
	public JPanel p2 = null;
	public JTextArea a = null;
	
	public TestFrame() {
		
		super("Test Frame");
						
		p1 = new JPanel();
		p2 = new JPanel();
		p2.setBackground(Color.blue);
		JButton b = new JButton("neuer Text");
		b.setActionCommand("text");
		b.addActionListener(this);
		a = new JTextArea("neuer Text");
		
		p1.add(b);
		//p2.add(a);
		
		getContentPane().setLayout(new GridLayout(2,0));		
		getContentPane().add(p1);
		getContentPane().add(p2);
	}

	public void actionPerformed(ActionEvent evt) {
		// TODO Auto-generated method stub
		if ("text".equals(evt.getActionCommand())){
			//System.out.println("button b");
			
			if (edit==null){
			edit = new Editor(this);
			TTO = new TextTransferObject();
			}
			
			edit.showIt(TTO);
			p2.add(a);
			a.setText(TTO.getText());//("neuer styled Text ...");
		}
	}
}

dies ist der kleine Editor (zur Übersichtlichkeit habe ich das "drumherum" wie Menüs und andere Buttons weggelassen)...

Code:
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.util.Hashtable;

public class Editor extends JDialog {

  private Action openAction = new OpenAction();
  private Action saveAction = new SaveAction();
  private Action returnAction = new ReturnAction();

  private JTextComponent textComp;
  private Hashtable actionHash = new Hashtable();
  
  @SuppressWarnings("unused")
  private TextTransferObject TTO;

  // Create an editor.
  public Editor(Frame frame) {
    super(frame,"Swing Editor",true);
    textComp = createTextComponent();
    makeActionsPretty();

    Container content = getContentPane();
    content.add(textComp, BorderLayout.CENTER);
    content.add(createToolBar(), BorderLayout.NORTH);
    setJMenuBar(createMenuBar());
    setSize(320, 240);
    setVisible(true);
    addWindowListener( 
            new WindowAdapter() { 
               public void windowClosing(WindowEvent event) 
               { 
                  setVisible(false); 
                  dispose(); 
               } 
            } 
         ); 

  }

  // Create the JTextComponent subclass.
  protected JTextComponent createTextComponent() {
    JTextArea ta = new JTextArea();
    ta.setLineWrap(true);
    return ta;
  }

  // Add icons and friendly names to actions we care about.
  protected void makeActionsPretty() {
  ......
  }

  public void showIt(TextTransferObject t){
	  TTO = t;
	  setVisible(true);
  }

  // Create a simple JToolBar with some buttons.
  protected JToolBar createToolBar() {
    JToolBar bar = new JToolBar();

    // Add simple actions for opening & saving.
    ...
    bar.add(returnString());
    bar.addSeparator();
   ...
    return bar;
  }

protected JMenuBar createMenuBar() {
    ...
    return menubar;
  }

  protected Action getOpenAction() { 
          return openAction; }

  protected Action getSaveAction() { 
	  return saveAction; 
	  }
  protected Action returnString(){
	  return returnAction;
  }

  protected JTextComponent getTextComponent() { 
          return textComp;
  }

  ....

  class ReturnAction extends AbstractAction{
	  public ReturnAction() {
	      super("Return", new ImageIcon("/icons/picture.gif"));
	  }
	  
	public void actionPerformed(ActionEvent ev) {
		String s = (String)textComp.getText();
		System.out.println(textComp.getText());
		TTO =new TextTransferObject();
		TTO.setText(s);
		setVisible(false);
	}  
  }


und hier das TTO:
Code:
public class TextTransferObject {

	public String text;
	
	public TextTransferObject(){
		text = "neuer Text ...";
	}
	
	public void setAll (String t){
		text = t; 
	}
	
	public void setText (String t) {
		text = t;
	}
	
	public String getText(){
		return(text);
	}
	
}
 
Zurück