Java JTextArea, ActionListener, ausgabe in der GUI?

Status
Für weitere Antworten geschlossen.

holzjunge

Ensign
Registriert
Juli 2008
Beiträge
135
Hi,

ich bräuchte bitte eure Hilfe. Habe schon ausgiebig gegoogelt, finde allerdings keine Antwort.
Haben an der FH als Übung eine Java GUI zu programmieren bekommen. Mit dieser komme ich soweit auch gut zurecht. Nur sind es zwei Aufgaben wo ich grade nicht weiter komme.

1. Müssen wir in unser Fenster das wir erstellt haben, ein Feld erstellen wo alle Event ausgegeben werden. Sprich wenn ich auf ein MenuItem klicke, das er das jeweilige ereigniss ausgibt. Wie bekomme ich das hin? Hatte mal etwas von einem JXFrame gelesen...dieser ließ sich aber erst gar nicht implementieren. Müssen alle MenuItem´s dafür über einen ActionListener verfügen?

2. Haben wir in dem Fenster eine JTextArea, die wir mit dem Menu "Format" -> Ausschneiden, Kopieren und Einfügen bearbeiten sollen. Das das Objekt JTextArea über solche Methoden verfügt habe ich in der API nachgelesen. Wie schreibe ich es aber nun das er den jeweiligen Effekt auf makierten Text ausführt?
Und warum finde er meine variable "ta1" nicht? obwohl ich diese sogar initialisiert und deklariert habe?

Achso Aufgabe war es mit ActionListenern aus einer Anonymen Klasse und einer Inneren Klasse zuarbeiten. Also nicht wundern

Vielen Dank.


Code:
import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.*;


public class MeinEditor
{
	JTextArea ta1;
	JFrame fenster;
	
	public MeinEditor()
	{
		fensterErzeugen();
		ta1 = new JTextArea("Bitte tragen Sie ihren Text ein.");
		fenster = new JFrame("Mein Editor");
	}
	
	private void fensterErzeugen()
	{
		JFrame fenster = new JFrame("Editor");
		Container contentPane = fenster.getContentPane();
		JTextArea ta1 = new JTextArea("Bitte tragen Sie ihren Text ein.");
		JTextArea ta2c = new JTextArea("");
		contentPane.add(ta1, BorderLayout.CENTER);
		contentPane.add(ta2c, BorderLayout.SOUTH);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		menuErzeugen(fenster);
		fenster.pack();
		fenster.setVisible(true);
	}
	
	private void menuErzeugen(JFrame fenster)
	{
		JMenuBar menuZeile = new JMenuBar();
		fenster.setJMenuBar(menuZeile);
		
		//Methodenübergabe
		reiterErzeugen(menuZeile);
	}
	
	private void reiterErzeugen(JMenuBar menuZeile)
	{
		JMenu datei = new JMenu("Datei");
		ImageIcon iconDatei = new ImageIcon("Images/Datei.png");
		datei.setIcon(iconDatei);
		menuZeile.add(datei);
		datei.setMnemonic(KeyEvent.VK_D);
		
		JMenu bearb = new JMenu("Bearbeiten");
		ImageIcon bearbIcon = new ImageIcon("Images/Bearb.png");
		bearb.setIcon(bearbIcon);
		menuZeile.add(bearb);
		bearb.setMnemonic(KeyEvent.VK_B);
		
		JMenu form = new JMenu("Format");
		ImageIcon formIcon = new ImageIcon("Images/Form.png");
		form.setIcon(formIcon);
		menuZeile.add(form);
		form.setMnemonic(KeyEvent.VK_F);
		
		JMenu help = new JMenu("Hilfe");
		ImageIcon helpIcon = new ImageIcon ("Images/Hilfe.png");
		help.setIcon(helpIcon);
		menuZeile.add(help);
		help.setMnemonic(KeyEvent.VK_H);
		
		//Methodenübergabe
		dateiItemErzeugen(datei);
		bearbItemErzeugen(bearb, ta1);
		formItemErzeugen(form);
		helpItemErzeugen(help);
	}
	
	private void dateiItemErzeugen(JMenu datei)
	{
		JMenuItem neu = new JMenuItem("Neu", new ImageIcon("Images/neu.png"));
		neu.setMnemonic(KeyEvent.VK_N);
		neu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));
		neu.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Neu ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Neu ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
			
		}
		);
		datei.add(neu);
		
		JMenuItem open = new JMenuItem("Oeffnen", new ImageIcon("Images/oeffnen.png"));
		datei.addSeparator();
		open.setMnemonic(KeyEvent.VK_O);
		open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.ALT_MASK));
		open.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				oeffnen(fenster);
			}
		});
		datei.add(open);
		
		JMenuItem save = new JMenuItem("Speichern", new ImageIcon("Images/save.png"));
		save.setMnemonic(KeyEvent.VK_S);
		save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.ALT_MASK));
		save.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Speichern ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Speichern ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		datei.add(save);
		
		JMenuItem saveas = new JMenuItem("Speichern unter...", new ImageIcon("Images/save.png"));
		saveas.setMnemonic(KeyEvent.VK_U);
		saveas.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.ALT_MASK));
		saveas.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Speichern unter..., ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Speichern unter..., ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		datei.add(saveas);
		datei.addSeparator();
		
		JMenuItem close = new JMenuItem("Schließen", new ImageIcon("Images/close.png"));
		close.setMnemonic(KeyEvent.VK_F4);
		close.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK));
		close.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				close();
			}
		});
		datei.add(close);
		
		JMenuItem exit = new JMenuItem("Beenden", new ImageIcon("Images/exit.png"));
		exit.setMnemonic(KeyEvent.VK_B);
		exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.ALT_MASK));
		datei.add(exit);
		exit.setMnemonic(KeyEvent.VK_B);
		exit.addActionListener(new BeendeAction());
	}
	
	private void bearbItemErzeugen(JMenu bearb,final JTextArea ta1)
	{	
		JMenuItem back = new JMenuItem("Rückgängig", new ImageIcon("Images/back.png"));
		back.setMnemonic(KeyEvent.VK_Y);
		back.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, ActionEvent.ALT_MASK));
		back.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Rückfgängig ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Rückgängig ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		bearb.add(back);
		
		JMenuItem vor = new JMenuItem("Wiederherstellen", new ImageIcon("Images/vor.png"));
		vor.setMnemonic(KeyEvent.VK_X);
		vor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK));
		vor.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Wiederherstellen ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Wiederherstellen ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		bearb.add(vor);
		bearb.addSeparator();
		
		JMenuItem cpy = new JMenuItem("Kopieren", new ImageIcon("Images/copy.png"));
		cpy.setMnemonic(KeyEvent.VK_K);
		cpy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K, ActionEvent.ALT_MASK));
		cpy.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				textCopy(ta1);
			}
		});
		bearb.add(cpy);
		
		JMenuItem cut = new JMenuItem("Ausschneiden", new ImageIcon("Images/cut.png"));
		cut.setMnemonic(KeyEvent.VK_A);
		cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.ALT_MASK));
		cut.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				textCut(ta1);
			}
		});
		bearb.add(cut);
		
		JMenuItem in = new JMenuItem("Einfügen", new ImageIcon("Images/paste.png"));
		in.setMnemonic(KeyEvent.VK_E);
		in.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.ALT_MASK));
		in.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				textPaste(ta1);
			}
		});
		bearb.add(in);
	}
	
	private void formItemErzeugen(JMenu form)
	{
		JMenuItem passen = new JMenuItem("Anpassen", new ImageIcon("Images/passen.png"));
		passen.setMnemonic(KeyEvent.VK_P);
		passen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.ALT_MASK));
		passen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Anpassen ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Anpassen ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		form.add(passen);
		
		JMenuItem grss = new JMenuItem("Größe", new ImageIcon("Images/grss.png"));
		grss.setMnemonic(KeyEvent.VK_G);
		grss.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, ActionEvent.ALT_MASK));
		grss.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Größe ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Größe ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		form.add(grss);
	}
	
	private void helpItemErzeugen(JMenu help)
	{
		JMenuItem ueber = new JMenuItem("Über uns", new ImageIcon("Images/ueber.png"));
		ueber.setMnemonic(KeyEvent.VK_U);
		ueber.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.ALT_MASK));
		ueber.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				JOptionPane.showMessageDialog(null,"Version 1.0, Programmiert von: .... 04.06.13","Über mich", JOptionPane.PLAIN_MESSAGE);
			}
		});
		help.add(ueber);
		help.addSeparator();
		
		JMenuItem online = new JMenuItem("Onlinehilfe", new ImageIcon("Images/online.png"));
		online.setMnemonic(KeyEvent.VK_O);
		online.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.ALT_MASK));
		online.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Onlinehilfe ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Onlinehilfe ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		help.add(online);
		
		JMenuItem manager = new JMenuItem("Hilfemanager", new ImageIcon("Images/manager.png"));
		manager.setMnemonic(KeyEvent.VK_M);
		manager.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.ALT_MASK));
		manager.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Hilfemanager ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Hilfemanager ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		help.add(manager);
		help.addSeparator();
		
		JMenuItem update = new JMenuItem("Auf Updates prüfen", new ImageIcon("Images/update.png"));
		update.setMnemonic(KeyEvent.VK_D);
		update.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
		update.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Update ist noch nicht Implementiert!");
				JOptionPane.showMessageDialog(null,"Update ist noch nicht Implementiert!","Error", JOptionPane.ERROR_MESSAGE);
			}
		});
		help.add(update);
	}
	
	//Methode für Statuszeile
	/*public void statusZeileErzeugen()
	{
		JXStatusBar status = new JXStatusBar();
		Container contentPane = status.getContentPane();
		contentPane.add(status);
		
	}*/
	

	
	//Anonymeklassen Methodenaufrufe
	private void oeffnen(JFrame fenster)
	{
		JFileChooser opener = new JFileChooser();
		int result = opener.showOpenDialog(fenster);
		System.out.println(result);
		if(result==JFileChooser.APPROVE_OPTION)
		{
			System.out.println(opener.getSelectedFile());
		}
	}
	
	private void close()
	{
		System.out.println("Schließen nicht implementiert.");
	}
	
	private void textCopy(JTextArea ta1)
	{
		//JLabel lbta1 = new JLabel("");
		ta1.copy();
	}
	
	private void textCut(JTextArea ta1)
	{
		ta1.cut();
	}
	
	private void textPaste(JTextArea ta1)
	{
		ta1.paste();
	}
	
	public class BeendeAction implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			System.exit(0);
		}	
	}
	
	
	public static void main(String[] args) 
	{
		new MeinEditor();
	}	
}
 
Der Quelltext ist viel zu lang als das ich die Zeit hätte, Zeile für Zeile durchzugehen.

Ich kann dir jedoch einige deiner Fragen beantworten:

Das mit der Variable "JTextArea ta1" funktioniert so nicht, da du sie in Zeile 10 deklarierst, gleichzeitig jedoch in Zeile 24 deklarierst und initialisierst. Du erzeugst ja ein neues Objekt, du musst also in Zeile 24 nur noch eine Wertzuweisung machen, du hast die Variable ja schon deklariert.
Sprich:

ta1 = ......

Zu deiner Frage bezüglich der ActionListener:

Sofern du beim Drücken eines Buttons ein Event auslösen möchtest, braucht dieser Button einen ActionListener. Also musst du für alle Buttons, die etwas auslösen sollen, einen ActionListener implementieren.

Vielleicht hilft dir das.
 
holzjunge schrieb:
ich bräuchte bitte eure Hilfe. Habe schon ausgiebig gegoogelt, finde allerdings keine Antwort.

Nach was hast Du denn gesucht, dass Du keine Antwort gefunden hast?

holzjunge schrieb:
1. Müssen wir in unser Fenster das wir erstellt haben, ein Feld erstellen wo alle Event ausgegeben werden. Sprich wenn ich auf ein MenuItem klicke, das er das jeweilige ereigniss ausgibt. Wie bekomme ich das hin? Hatte mal etwas von einem JXFrame gelesen...dieser ließ sich aber erst gar nicht implementieren. Müssen alle MenuItem´s dafür über einen ActionListener verfügen?

Nicht zwingend. Man kann Events auch global abfragen. Z.B. so.

Code:
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
    {
        public void eventDispatched(AWTEvent rEvent)
        {
            ...
        }
    };

Gibt auch noch andere Möglichkeiten. Aber ich bezweifele, dass euer Tutor darauf hinaus will.

holzjunge schrieb:
2. Haben wir in dem Fenster eine JTextArea, die wir mit dem Menu "Format" -> Ausschneiden, Kopieren und Einfügen bearbeiten sollen. Das das Objekt JTextArea über solche Methoden verfügt habe ich in der API nachgelesen. Wie schreibe ich es aber nun das er den jeweiligen Effekt auf makierten Text ausführt?

In Deinem Listener (oder einer entsprechenden Action) rufst Du die gewünschte Methode auf. Hierzu benötigst Du eine Referenz der JTextArea, aber die findet sich ja als Klasseninstanz. Was macht Dir hier Probleme?

Best-practise würde man aber nicht mit ActionListenern arbeiten. Die gewünschten Funktionen sind als Actions implementiert, die man nutzen und damit die JMenuItems erstellen kann.

http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#commands
Ergänzung ()

Tibone 1990 schrieb:
Also musst du für alle Buttons, die etwas auslösen sollen, einen ActionListener implementieren.

Nicht zwingend. Oft ist die Verwendung einer Action sinnvoller. Der notwendige ActionListener wird dann automatisch erstellt.
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben