JFrame und co.

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen!

Ich habe eine Ausbildung zum FI-AE hinter mir und habe bisher (leider nur) mit PHP und auch vor einiger Zeit mal mit Visual Basic gearbeitet.
Und da ich mich als Anwendungsentwickler weiterentwickeln will, arbeite ich mich nun in Java ein.
Ich habe mir jetzt mal das 'Handbuch der Java-Programmierung' durchgelesen und sogar einiges verstanden :wink:

Also hab ich mir gedacht ich beginne mal mit nem Software-Projekt um den Kram aus dem Buch auch mal anzuwenden.

Allerdings steh ich jetzt vor nem Problem mit dem Anzeigen und verändern des ContentPanes.
Ich habe eine Klasse 'DesktopWindow' welche einen JFrame mit Menü definiert.
Jetzt möchte ich gerne, daß wenn jemand auf einen Menüpunkt klickt, sich der content(Buttons, Listen) im ContentPane verändern.
Ich wollte dazu Klassen schreiben, die verschiedene ContentPanes definieren.
Das bekomm ich allerdings nicht hin. Ist das so überhaupt machbar und üblich oder hab ich da von
Vornherein falsch gedacht?? ???:L
 

Boiorix

Mitglied
Uuups! Ich dachte ich wär eingeloggt... zuviel gedacht.
Der Beitrag ist von mir erstellt worden..... :oops:
 

L-ectron-X

Gesperrter Benutzer
So, wie du dir das gedacht hast, ist das schon in Ordnung.
Den Inhalt, der wechseln soll, legst du in verschiedene Klassen, die von JPanel erben.
Bei Auswahl eines Menüpunktes setzt du dann nur das passende JPanel in den JFrame.
 

Boiorix

Mitglied
OK, jetzt habe ich eine Klasse in der ein JPanel definiert wird.
Nun muss ich ja in der Klasse DesktopWindow mit ActionListener die Menüauswahl des Users entgegennehmen um dann das richtige JPanel anzuzeigen.
Aber wie bekomm ich die Action? Ich kenn jetzt nur die Sache per ActionPerformed()...da diese aber Void ist, bekomm
ich die Variable a = getActionCommand nicht raus um Sie in this.getContentPane().add zu benutzen. ???:L

Hier ist was ich bisher hab:

Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class DesktopWindow
extends JFrame
implements ActionListener
{
	public DesktopWindow()
	{
		String menuAuswahl ="";
		//Erzeugen des Hauptfensters
		
		//Einbinden der Methode mit der das Fenster geschlossen werden kann
		addWindowListener(new WindowClosingAdapter(true));
		//Erzeugen des Hauptfenster-Menues
		JMenuBar menubar = new JMenuBar();
		menubar.add(DateiMenu());
		menubar.add(KostenMenu());
		setJMenuBar(menubar);
		
		/*folgende if funktioniert ja nur wenn ich an die Variable a von actionPerformed()
		 *rankomme....ActionPerformed hat aber keinen Rückgabewert und will auch keinen
		 * Annehmen.. 
		 */
		if(menuAuswahl == "Kosten")
		{
			kosten kost = new kosten();
			this.getContentPane().add(kost);
		}
	}	
	
	public void actionPerformed(ActionEvent event)
	{
		String a;
		a = event.getActionCommand();
	}
	
//	Konstruieren der Menüs
	private JMenu DateiMenu()
	{
		
		
		//Erstellen des Menüpunkts
		JMenu datei = new JMenu("Datei");
		datei.setMnemonic('D');
		
		JMenu kosten = new JMenu("Kosten");
		kosten.setMnemonic('K');
		
		//Erstellen der Menü-Items für Datei
		JMenuItem mi;
		
		mi = new JMenuItem("Speichern", 'p');
		setCtrlAccelerator(mi, 'S');
		mi.addActionListener(this);
		datei.add(mi);
		
		datei.addSeparator();
		
		mi = new JMenuItem("Beenden", 'e');
		setCtrlAccelerator(mi, 'B');
		mi.addActionListener(this);
		datei.add(mi);
		
		return datei;
	}
	
	private JMenu KostenMenu()
	{
		//Erstellen des Menüpunkts
		JMenu kosten = new JMenu("Kosten \\ Einnahmen");
		kosten.setMnemonic('K');
		
		//Erstellen der Menü-Items für Kosten\Einnahmen
		JMenuItem mi;
		
		mi = new JMenuItem("Kosten", 'K');
		setCtrlAccelerator(mi, 'o');
		mi.addActionListener(this);
		kosten.add(mi);
		
		mi = new JMenuItem("Einnahmen", 'E');
		setCtrlAccelerator(mi, 'n');
		mi.addActionListener(this);
		kosten.add(mi);
		
		return kosten;
	}
	
	private void setCtrlAccelerator(JMenuItem mi, char acc)
	{
		KeyStroke ks = KeyStroke.getKeyStroke(acc, Event.CTRL_MASK);
		mi.setAccelerator(ks);
	}
}

Code:
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;

public class kosten
extends JPanel
implements TableData
{
	public kosten()
	{
		JTable table1 = new JTable(DATA,COLHEADS);
		this.add(table1);
	}
}

Code:
import javax.swing.*;
public class CostControlMain 
{
	public static void main(String[] args)
	{
		DesktopWindow Dwnd = new DesktopWindow();
		Dwnd.setSize(500,500);
		Dwnd.setLocation(400,200);
		Dwnd.setTitle("CostControl");
		
		Dwnd.setVisible(true);
	}
}

Schonmal danke für die Mühe :wink:
 

L-ectron-X

Gesperrter Benutzer
Entweder reichst du das Erbebnis von getActionCommand() an eine andere Methode weiter, die damit arbeiten kann, oder du definierst eine private Instanzvariable (global) vom Typ String, die dann den Wert aufnimmt und hast so Zugriff innerhalb der gesamten Klasse.
 

Boiorix

Mitglied
Danke für die Antwort.... ich habs jetzt doch innerhalb von ActionPerformed hinbekommen.
War wohl ein Verständnisproblem.
Abgeänderte ActionPerformed:

Code:
public void actionPerformed(ActionEvent event)
	{
		//Menueauswahl des Users in Klassenvariable speichern
		String a = event.getActionCommand();
		JPanel currentPanel = new JPanel();
		
		if(a=="Kosten")
		{
			kosten kost = new kosten();
			getContentPane().remove(currentPanel);
			getContentPane().add(kost);
			getContentPane().validate();
			currentPanel = kost;
		}
		else
		{
			einnahmen ein = new einnahmen();
			getContentPane().remove(currentPanel);
			getContentPane().add(ein);
			getContentPane().validate();
			currentPanel = ein;
		}
	}

Jetzt hänge ich allerdings seit geraumer Zeit bei meiner Table.
Ich habe ein Table Model in dem anhand der Methode load() Daten aus einem Textfile in einem
2dim-Array gespeichert werden.
Die Tabelle soll mit den Daten des Arrays gefüllt werden.... Allerdings funkt das bei mir nicht...
getValueAt() macht immer wieder probleme...
Ich hab mir auch das JTable-Tut durchgelesen, aber komm trotzdem nicht weiter... :cry:
Hier mal das TableModel:

Code:
import javax.swing.table.*;
import java.io.*;
import java.lang.String;

public class CCTableModel 
extends AbstractTableModel
{
	String[][] daten2 = new String[Zeilen()][4];
	
	/**
	 * 
	 */
	  private static final long serialVersionUID = 1L;
	  
	  /*public CCTableModel()
	  {
		  load();
	  }*/
	  
	  //Methode zum Bestimmen der Zeilenanzahl von data.txt
	  public int Zeilen()
	  {
		  int Zeilen=0; 
		  BufferedReader reader;
		  
		  try
		  {
			  reader = new BufferedReader(new FileReader("C:\\data.txt"));
		  
			  while((reader.readLine()) != null)
			  {
				  ++Zeilen;
			  }
		  }
		  catch(IOException e)
		  {
			  System.out.println("Fehler beim lesen der Datei");
		  }
		  return Zeilen;
	  }
	  
	  //Methode zum Auslesen der Textdatei data.txt
	  public String[][] load()
	  {
		  BufferedReader reader;
		  int j =0;
		  int i =0;
		  String line = "";
		  String[] daten;
		  
		  try
		  {
			  reader = new BufferedReader(new FileReader("C:\\data.txt"));
			 
			  while((line = reader.readLine()) != null)
			  {
				  //Zeile zerlegen und in einem Array speichern
				  daten = line.split(",");
				  
				  //array in mehrdimensionalem Array speichern
				  for(i=0;i<daten.length;++i)
				  {
					  daten2[j][i] = daten[i];
				  }
				  ++j;
			  }
		  }
		  catch(IOException e)
		  {
			  System.out.println("Fehler beim lesen der Datei");
		  }
		  return daten2;
	  }
	  
	  
	  public int getRowCount()  
	  {
	    return Zeilen()+1;
	  }

	  
	  public int getColumnCount()  
	  {
	    return 4;
	  }
	   
	    
	   public String getColumnName(int columnIndex)
	   {
	    String a="";
	    	
	    if(columnIndex == 0)
	    {
	    	a = "Kostenpunkt";
	    }
	    if(columnIndex == 1)
	    {
	    	a = "Betrag";
	    }
	    if(columnIndex == 2)
	    {
	    	a = "Intervall";
	    }
	    if(columnIndex == 3)
	    {
	    	a = "Fix?";
	    }
	    	return a;
	    }

	   
	    public Object getValueAt( int row, int col )  
	    {
	    	System.out.print("daten2= " +daten2[1][2]);
	    	return load();
	    }
	    
	    
	    public Class getColumnClass(int c) 
	    {	
	    	if(c==3)
	    	{
	    		return String.class;
	    	}
	    	else
	    	{
	    		return String.class;
	    	}
	    }
	    
	    
	    public boolean isCellEditable(int row, int col) 
	    {
	    	return true;
	    }


}

data.txt:


Code:
Miete,520,monatlich,true
Nebenkosten,120,monatlich,false
 

L-ectron-X

Gesperrter Benutzer
Beim Überfliegen fielen mir Sachen auf wie:
Code:
if(a=="Kosten")

Richtig muss das so aussehen:
Code:
if(a.equals("Kosten"))

Noch ein Beispiel für eine Verbesserung des Codes:
Code:
public String getColumnName(int columnIndex) {           
   switch(columnIndex) {
      case 0: 
          return "Kostenpunkt"; 
 
      case 1:
          return "Betrag"; 

      case 2:
          return "Intervall"; 
        
      case 3: 
          return "Fix?"; 
   }
}
 

Boiorix

Mitglied
soooo...code wurde verbessert und Fehler gefunden:


Code:
public int getRowCount()  
	{
		return Zeilen();
	}
Hier hatte ich zuvor 'return Zeilen()+1' stehen, da ich gerne eine zusätzliche Zeile für eine
neue Eingabe gehabt hätte.

Jetzt klappt auch:
Code:
public Object getValueAt( int row, int col )  
	{
		return load()[row][col];
	}

Allerdings weiss ich nicht wie ich die zusätzliche row hinbekomme...
und die true/false in data.txt sollten eigentlich als checkbox wiedergegeben werden...
daher auch dieser etwas unsinnig erscheinende code:

Code:
public Class getColumnClass(int c) 
	{
		if(c==3)
	    {
	    	return String.class;
	    }
	    else
	    {
	    	return String.class;
	    }

	}
2x return String.class; damit das proggie wenigstens läuft :wink:

Hat da jemand nen guten Lösungsansatz oder ne Idee?

EDIT: Das HInzufügen einer neuen Zeile hab ich gelöst. Einfach in der Methode Zeilen() return Zeilen+1 anstatt return zeilen.
DAchte das würde nicht gehen, da er deswegen bei getRowCount() schon gemeckert hat... :bahnhof:

EDIT 2: Die Daten aus der Textdatei speichere ich jetzt in einem Object[][]. So kann ich verschiedene Datentypen in einem Array speichern.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
E JFrame + Buffer-strategy Java Basics - Anfänger-Themen 8
I JFrame / Screen auf zweitem (definiertem) Monitor öffnen Java Basics - Anfänger-Themen 3
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
B HSQL mit JFrame steuern Java Basics - Anfänger-Themen 4
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
S Kontrollieren ob jframe disposed ist Java Basics - Anfänger-Themen 3
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
M Bild in JFrame Java Basics - Anfänger-Themen 1
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
S JFrame Java Basics - Anfänger-Themen 15
I JFrame proportional verkleinerbar machen Java Basics - Anfänger-Themen 3
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
3 JFrame immer im Hintergrund Java Basics - Anfänger-Themen 1
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R JFrame nicht verschiebbar Java Basics - Anfänger-Themen 2
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
K Java JFrame mit Hintergrundbild erstellen Java Basics - Anfänger-Themen 1
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
H Eclipse JFrame Java Basics - Anfänger-Themen 3
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
B Ist MyFrame oder JFrame besser? Java Basics - Anfänger-Themen 3
Y JFrame sichtbarkeit Java Basics - Anfänger-Themen 4
KeVoZ_ Label auf JFrame willkürlich Positionieren Java Basics - Anfänger-Themen 2
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
P JFrame nur einmal öffnen Java Basics - Anfänger-Themen 4
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
J JPG in JFrame anzeigen lassen Java Basics - Anfänger-Themen 3
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
F GUI als Klasse oder extend JFrame? Java Basics - Anfänger-Themen 6
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
thomasbomme Grafikfehler JFrame- Cleartype Java Basics - Anfänger-Themen 1
GreyFox Arbeit mit JFrame Java Basics - Anfänger-Themen 8
T Erste Schritte 2 Codes zusammen fügen / Label in JFrame Java Basics - Anfänger-Themen 1
Z Zwei Images auf einem JFrame - Aber nur eins wird angezeigt! Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
W 2 JPanels in 2Klasse in einem JFrame zusammenfügen Java Basics - Anfänger-Themen 12
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
M Rahmen für undekorierten JFrame Java Basics - Anfänger-Themen 6
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
B Erste Schritte JFrame in Klasse auslagern Java Basics - Anfänger-Themen 4
H JFrame komplett schließen Java Basics - Anfänger-Themen 3
S Brauche hilfe bei Pong (JFrame) Java Basics - Anfänger-Themen 2
M hintergrund in jframe festlegen Java Basics - Anfänger-Themen 4
J JFrame Render Fehler - Warum? Java Basics - Anfänger-Themen 2
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
D Best Practice JFrame im JFrame Java Basics - Anfänger-Themen 2
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
S Erste Schritte Von JFrame in nächstes JFRame wechseln Java Basics - Anfänger-Themen 0
V JFrame aktualisieren Java Basics - Anfänger-Themen 6
S JFrame ist nicht schwarz Java Basics - Anfänger-Themen 5
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
S JFrame wird nicht "bemalt" Java Basics - Anfänger-Themen 2
M Unsichtbare Objekte in JFrame Java Basics - Anfänger-Themen 2
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
B Drawline wird auf JFrame nicht angezeigt Java Basics - Anfänger-Themen 3
N Fokus setzen nachdem JFrame in Vordergrund geholt wurde Java Basics - Anfänger-Themen 7
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
S JFrame leeren Java Basics - Anfänger-Themen 6
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
M Schriftfarbe in JFrame Java Basics - Anfänger-Themen 24
A JFrame läuft ewig? Java Basics - Anfänger-Themen 2
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
B Wie kann man auf das JFrame einer anderen Klasse zugreifen, etwas hinzufügen und entfernen?? Java Basics - Anfänger-Themen 3
N JFrame-Objekt in neuer Methode nicht verfügbar? Java Basics - Anfänger-Themen 3
A Frage zu: JFrame setLocationRelativeTo Java Basics - Anfänger-Themen 3
N Erste Schritte Prozessor Kernanzahl in JFrame Java Basics - Anfänger-Themen 3
DStrohma Transparenter JFrame Java Basics - Anfänger-Themen 3
R JFrame über einen JPanel Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben