getComponent() problem

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Erst mal ein Hallo an alle Forenmitglieder, das dies hier mein erster Eintrag ist :)

Habe ein kleines Programm geschrieben, so ne Art Texteditor (mein erstes "Projekt", wenn man es so nennen will :) ),
hier der Code


Code:
package main;

import javax.swing.JFrame;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.JToolBar;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JFileChooser;
import javax.swing.JTextArea;
import javax.swing.JLabel;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import java.io.IOException;
import java.beans.PropertyVetoException;

import java.util.ArrayList; // 

public class JavaWriter 
extends JFrame
{
	public JDesktopPane desktop = new JDesktopPane();
	public ArrayList<JInternalFrame> internalFrame = new ArrayList<JInternalFrame>();
	public JToolBar toolBar;
	public JFileChooser fileChooser;
	
	private JButton newButton;
	private JButton openButton;
	private JButton saveButton;
	private JButton aboutButton;
	
	private Management manage = new Management(desktop);
	
	public JavaWriter()
	{
		super("JavaWriter");
		try {
	        UIManager.setLookAndFeel(
	            UIManager.getSystemLookAndFeelClassName());
	    } 
	    catch (Exception e) {
	       e.printStackTrace();
	    }
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		
		
		//JMenuBar
		JMenuBar menuBar = new JMenuBar();
		menuBar.add(createFileMenu());
		menuBar.add(createEditMenu());
		setJMenuBar(menuBar);
		
		
		// ToolBar
		setToolBar(toolBar);
		
		
		// JDesktopPane
		add(desktop, BorderLayout.CENTER);
	}
	
	
	public void setToolBar(JToolBar toolBar) 
	{
		toolBar = new JToolBar("ToolBar", JToolBar.HORIZONTAL);
		toolBar.setFloatable(false); // ToolBar should not be moved
		
		
		newButton = new JButton(new ImageIcon("Images/newSmall.png"));
		newButton.setToolTipText("Click for new File");
		newButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				newButtonActionPerformed();
			}
		});
		toolBar.add(newButton);
		
		
		openButton = new JButton(new ImageIcon("Images/openSmall.png"));
		openButton.setToolTipText("Click for opening a File");
		openButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				openButtonActionPerformed();
			}
		});
		toolBar.add(openButton);
		
		
		saveButton = new JButton(new ImageIcon("Images/saveSmall.png"));
		saveButton.setToolTipText("Click for saving selected File");
		saveButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				saveButtonActionPerformed();
			}
		});
		toolBar.add(saveButton);
		
		
		aboutButton = new JButton(new ImageIcon("Images/aboutSmall.png"));
		aboutButton.setToolTipText("Click for Information");
		aboutButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				aboutButtonActionPerformed();
			}
		});
		toolBar.add(aboutButton);
		
		add(toolBar, BorderLayout.NORTH);
	}
	

	public JMenu createFileMenu()
	{
		JMenu fileMenu = new JMenu("File");
		JMenuItem item;
		
		// Option "new"
		item = new JMenuItem("New");
		manage.setCtrlAccelerator(item, 'N');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.addChild(null, null);
			}
		});
		fileMenu.add(item);
		
		// Option "open"
		item = new JMenuItem("Open File...");
		manage.setCtrlAccelerator(item, 'O');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.chooseFile();
			}
		});
		fileMenu.add(item);
		
		// Option "save"
		item = new JMenuItem("Save");
		manage.setCtrlAccelerator(item, 'S');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		fileMenu.add(item);
		
		// Option "saveas"
		item = new JMenuItem("Save As...");
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		fileMenu.add(item);
		
		// insert separator
		fileMenu.addSeparator();
		
		// Option "exit"
		item = new JMenuItem("Exit");
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(1);
			}
		});
		fileMenu.add(item);
		
		
		return fileMenu;
	}
	
	public JMenu createEditMenu()
	{
		JMenu editMenu = new JMenu("Edit");
		JMenuItem item;
		
		// Option "undo"
		item = new JMenuItem("Undo");
		manage.setCtrlAccelerator(item, 'Z');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.chooseFile();
			}
		});
		editMenu.add(item);
		
		// Option "redo"
		item = new JMenuItem("Redo");
		manage.setCtrlAccelerator(item, 'Y');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.chooseFile();
			}
		});
		editMenu.add(item);
		
		// insert separator
		editMenu.addSeparator();
		
		// Option "cut"
		item = new JMenuItem("Cut");
		manage.setCtrlAccelerator(item, 'X');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.cutCopyPasteSelect("cut");
			}
		});
		editMenu.add(item);
		
		// Option "copy"
		item = new JMenuItem("Copy");
		manage.setCtrlAccelerator(item, 'C');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.cutCopyPasteSelect("copy");
			}
		});
		editMenu.add(item);
		
		// Option "paste"
		item = new JMenuItem("Paste");
		manage.setCtrlAccelerator(item, 'V');
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.cutCopyPasteSelect("paste");
			}
		});
		editMenu.add(item);
		
		// insert separator
		editMenu.addSeparator();
		
		// Option "selectall"
		item = new JMenuItem("Select All");
		item.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manage.cutCopyPasteSelect("selectall");
			}
		});
		editMenu.add(item);
		
		
		return editMenu;
	}
	
	public void newButtonActionPerformed() 
	{
		manage.addChild(null, null);
	}
	
	
	public void openButtonActionPerformed() 
	{
		manage.chooseFile();
	}
	
	
	public void saveButtonActionPerformed() 
	{
		JTextArea tempTextArea;
		tempTextArea = (JTextArea) desktop.getSelectedFrame().getComponent(1);
		
		fileChooser = new JFileChooser();
		
		int state = fileChooser.showSaveDialog(null);
		
		if (state == JFileChooser.APPROVE_OPTION) {
			write(tempTextArea, desktop.getSelectedFrame().getTitle());
		}
	}
	
	
	public void aboutButtonActionPerformed() 
	{
		manage.about();
	}
	
	
	public void write(JTextArea tempTextArea, String fileName)
	{
		
		File file = new File(fileName);
		try {
			tempTextArea.write(new FileWriter(file, true));
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}
}





package main;

import java.awt.Event;
import java.awt.GridLayout;
import java.beans.PropertyVetoException;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.KeyStroke;

public class Management 
{
	private JDesktopPane desktop;
	
	public Management(JDesktopPane desktop)
	{
		this.desktop = desktop;
	}
	
	public void chooseFile()
	{
		JFileChooser fileChooser = new JFileChooser();
		
		int state = fileChooser.showOpenDialog(null);

		File file = null;
		if (state == JFileChooser.APPROVE_OPTION) {
			file = fileChooser.getSelectedFile();
		}
		addChild(file, file.getName());
	}
	
	public void addChild(File file, String title)
	{
		JInternalFrame child = new JInternalFrame("NEW", true, true, true, true);
		child.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
		child.setSize(300, 300);  // temporary solution TODO default set maximum of JDesktopPane
		
		JTextArea textArea = new JTextArea();
		if (file != null && title != null) {
			try {
				textArea.read(new FileReader(file), "file"); // file ok // fileName not working
	        } 
			catch (IOException e) {
				textArea.setText("problems loading file");
	        }
			
			child.add(new JScrollPane(textArea));
			child.setVisible(true);
			desktop.add(child);
			
			try {
				child.setSelected(true);
			} catch (PropertyVetoException e) {
				e.printStackTrace();
			}
		} 
		else {
			child.add(new JScrollPane(textArea));
			child.setVisible(true);
			desktop.add(child);
			
			
			try {
				child.setSelected(true);
			} catch (PropertyVetoException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	public JFrame about() 
	{
		JFrame aboutFrame = new JFrame();
		aboutFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		aboutFrame.setSize(400, 200);
		aboutFrame.setLocation(200, 200);
		aboutFrame.setResizable(false); 
		aboutFrame.setLayout(new GridLayout(3, 1));
		
		// TODO temporary solution
		JLabel[] aboutLabel = new JLabel[3];
		String[] aboutText = {"Auhtor : Michael Birk", "About : Programm for creating and editing textbased files", "Information : still in construction!!"};
		
		for (int i = 0; i < aboutLabel.length; i++) {
			aboutLabel[i] = new JLabel(aboutText[i]);
			aboutFrame.add(aboutLabel[i]);
		}
		
		aboutFrame.setVisible(true);
		return aboutFrame;
	}
	
	
	public void cutCopyPasteSelect(String type)
	{
		JTextArea tempTextArea;
		tempTextArea = (JTextArea) desktop.getSelectedFrame().getComponent(1);
		if (type == "cut") {
			tempTextArea.cut();
		}
		else if (type == "copy") {
			tempTextArea.copy();
		}
		else if (type == "paste") {
			tempTextArea.paste();
		}
		else if (type == "selectall") {
			tempTextArea.selectAll();
		}
	}
	
	
	public void setCtrlAccelerator(JMenuItem item, char acc)
	{
		KeyStroke ks = KeyStroke.getKeyStroke(acc, Event.CTRL_MASK);
		item.setAccelerator(ks);
    }
}


Würde mich zum einen über allgmeine Ratschläge und Kritik freuen! (Aufbau, "Code-Stil", etc.)
Zum anderen habe ich ein konkretes Problem:

Ich versuche einige male mit

Code:
     JTextArea tempTextArea;
     tempTextArea = (JTextArea) desktop.getSelectedFrame().getComponent(1);

auf die JTextArea, die in jedem JInternalFrame vorhanden sein soll, zuzugreifen um diverse Funktionen auszuführen, nur klappt es irgendwie nicht!
Nun habe ich gehofft hier könnte mir jemand den Grund für mein "scheitern" sagen!

mfg Michael
 

babuschka

Top Contributor
Hab das Problem nun endlich gelöst...

Konnte mit

Code:
public JTextArea getArea()
	{
		JInternalFrame selectedFrame = desktop.getSelectedFrame();
		
		Container contentPane = selectedFrame.getContentPane();
		JScrollPane tempScrollPane = (JScrollPane) contentPane.getComponent(0);
		JViewport tempViewPort =  (JViewport) tempScrollPane.getComponent(0);
		JTextArea tempTextArea = (JTextArea) tempViewPort.getComponent(0); // JTextArea
		//System.out.println(tempTextArea.getClass());
		
		return tempTextArea;
	}

endlich auf die JTextArea zugreifen!

Falls jemand eine andere/schönere/bessere Lösung für das Problem hat immer her damit :)

mfg Michael
 

Marco13

Top Contributor
Am besten: Garnicht. Man sollte im allgemeinen nicht mit getComponent(...) auf "spezielle" Components zugreifen. Wenn du später mal in der contentPane des "selectedFrame" NICHT nur eine scrollPane liegen hast, sondern z.B. ein JLabel (mit einer Überschrift) und darunter die scrollPane, haut's das mit einer ClassCastException raus.
Ob du bei einem Editor ohne eine... sauberere Klassenstruktur so glücklich werden wirst, ist eine andere Frage. Die Klasse "Management" könnte wohl auch einen anderen Namen haben... z.B: "ClassContainingSomeStuffAndSoOn". Dass z.B. addChild ein File übergeben bekommt, diese File dann (im Event Dispatch Thread!?) liest, und irgendwelche Components erstellt und irgendwo hinzufügt, ist IMHO schon grenzwertig. Du solltest dir mal Klassen wie http://java.sun.com/javase/6/docs/api/javax/swing/text/Document.html ansehen - und alles, was damit zusammenhängt.
Um die eigentliche Frage (wie man an die TextArea rankommt) beantworten zu können, müßte man genauer wissen, wann und wofür das gebraucht wird. Eine Möglichkeit wäre vielleicht(!) eine Map von JInternalFrame auf die TextAreas, aber ... ob das sinnvoll wäre, ist schwer zu sagen, solange man das Ziel nicht genau kennt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Methode von MyContainer durch getComponent(int) aufrufen? Java Basics - Anfänger-Themen 2
C Problem mit Spring Boot Dependency Injection Java Basics - Anfänger-Themen 12
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
F Problem mit Listen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben