# Notenbuch - Projekt



## yax (10. Jul 2010)

Heeey,

wer hat lust eine Art Notenbuch zu Programmieren.

Zum Beispiel soll man im Programm die einzelnen Fächer auswählen, Noten eintragen und ändern. Und was halt noch dazu passt  

PS: Darf man hier eigentlich so etwas Fragen??


----------



## Gast2 (10. Jul 2010)

> PS: Darf man hier eigentlich so etwas Fragen??


Wenns dir darum geht mit jemand anderem zusammen das Programm zu schreiben, warum nicht? 

Wenn du allerdings jemanden suchst der das komplett für dich schreibt dann solltest du dich mal in der Jobbörse umschauen.


----------



## yax (10. Jul 2010)

Nein, Um gottes willen 

Ich möchte unbedingt auch selber etwas schreiben, aber ich möchte auch mit jemanden zusammenarbeiten.


Hat denn jemand lust??


----------



## yax (10. Jul 2010)

Hat denn keiner Lust??


----------



## mjdv (10. Jul 2010)

Hmm ich würde mich vll. ein bissche einbringen 

Musst nur sagen wie genau das aussehen soll ^^


----------



## yax (10. Jul 2010)

Also ich dachte wenn man das Programm öffnet kommt ein Fenster wo man durch einen Button eine neue "Visitenkarte" erstellen kann. Dort kann man dann die Fächer auswählen und dann zu jeden Fach eine Note zuordnen. Wenn man dann zum Beispiel auf OK oder so klickt kommt man wieder zum ertsen Fenster. Dort kann man auch auf einen anderen Button drücken, der dan ein neues Fenster mt den ganzen ertsellten Visitenkarten öffnet. Diese kann man dann auch noch änder und so weiter...

Ist das das was du hören wolltes??


----------



## mjdv (10. Jul 2010)

Ja und welches GUI Toolkit? Wird mit einem Designer programiert und hast du dir shcon Gedanken über das Konzept gemacht, was das Programm noch alles können soll, wie du die Noten speicherst etc.


----------



## yax (10. Jul 2010)

Also ich hatte vor mit Swing zu arbeiten. Und die Noten wollte ich vielleicht in einer Datenbank speichern, aber ein klitzekleines Probelm gibt es dabei (  ) ich kann keine Datenbanken schreiben. Also noch nicht 

Also man soll halt eine "Visitenkarte" erstellen können. Diese kann man dann halt durch einen Button in einen neuen Fenster öffnen(ich würder sagen JDialog). Die Visitenkarten könnte man in JTappedPane anordnen um schnell zwischen den Visitenkarten zu wechseln. Dann soll man halt auch durch einen Knopf im "Hauptfenster" ein JDialog öffnen wo man entweder neue Visitenkarten erstellen oder schon ersellte Visitenkarten ändern kann. Diese Speichert man dann halt ab, und wenn am ndas Programm wieder öffnet sind die Visitenkarten noch da


----------



## yax (11. Jul 2010)

mjdv?? Bist du denn noch daa??


----------



## yax (11. Jul 2010)

Also ich komm mit diesen Datenbank zeugs einfach nicht klar!!!

Ich kann zwar eine Datenbank mit daten füllen. Aber ich möchte meinen Inhalt eines JTextFields in der Datenbank haben, und diesen Inhalt nach einen Buttonklick wieder einlesen also der Inhalt soll wieder im JTextField stehen oder in einenJLabel..

Kann mir dies vielleicht jemand (für dumme leute) erklären??? Bitttte


----------



## XHelp (11. Jul 2010)

Öhm... Vllt solltest du erstmal verraten:
- welche Datenbank das ist
- wie "füllst du die Datenbank mit Daten"
- wie versuchst du bis jetzt auszulesen.


----------



## yax (11. Jul 2010)

Also,

-Ich benutze eine H2-Datenbank,
-Ich habe bis jetzt nur geschafft sie manuell zu befüllen, also schon direkt im Code fülle ich sie mit Daten,
-Ich habe sie auch nur über die Konsole ausgelesen, also das ergebnis wird mir nur in der Konsole angezeigt


----------



## XHelp (11. Jul 2010)

Dann hast du dir sicherlich schon das Tutorial auf der H2 Seite angeguckt - Tutorial ?


----------



## yax (11. Jul 2010)

Jaaa hab ich auch, aber da habe ich nur das manuelle eintragen herausgefunden..


----------



## yax (11. Jul 2010)

aber ich möchte ja den Text aus einen JTextField.


----------



## XHelp (11. Jul 2010)

Dann hilft dir vllt das weiter: Lesson: JDBC Basics (The Java™ Tutorials > JDBC(TM) Database Access)


----------



## XHelp (11. Jul 2010)

Verstehe ich nicht... ist deine Frage wie du den Text aus JTextField auslesen kannst?


----------



## Gast2 (11. Jul 2010)

> aber ich möchte ja den Text aus einen JTextField.


Dafür holst du dir zuerst den Text auf dem Textfeld (getText()) und danach lässt du ein INSERT query auf die db los.

SQL Grammar

Hab dir in deinem anderen Thread noch nen bissl was geschrieben. Einen von den beiden solltest du mal zumachen lassen...


----------



## yax (11. Jul 2010)

Also das klingt ja suuuper loogisch. 

Aber ich habe immer eine Fehlermeldung.


```
jButton1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				jButton1.getText();
				Insert query Test VALUES(1, jButton1.getText());
				
			}
			
		});
```

und "Test" wird unterkringelt und es gibt halt ein Fehler.


----------



## Eldorado (11. Jul 2010)

Du hast dir das Turorial zu jdbc wohl nicht gründlich angeschaut. Du kannst deinen insert ja nicht einfach in den Quelltext schreiben, sondern musst ihn einer Methode eines Statement-Objekt übergeben.

```
statement.executeUpdate("BEFEHL");
```
Aber ich glaube, das ist nur die Spitze des Eisbergs, wie gesagt les dir das ganze Tutorial durch(auch wenn es Arbeit ist).


----------



## Gast2 (11. Jul 2010)

du kannst ja auch nicht einfach irgendwelchen Text in deinen Code schreiben :autsch:
queries musst du auf einer Connection ausführen (wie du die bekommst steht im anderen Thread). Auf der Connection kannst du dann erstmal prepareCall aufrufen, und auf dem statement dann execute.

Hast du die Links überhaupt gelesen?


----------



## yax (11. Jul 2010)

Ja habe ich!!!


----------



## yax (12. Jul 2010)

Okaaay, ich habe es geschafft 

Danke für eure Hilfe


----------



## yax (12. Jul 2010)

möchte irgendjemand denn das Notenbuch - Programm mit mir zusammen schreiben?????


----------



## yax (15. Jul 2010)

Hallo,

ich möchte jetzt gerne mit einen Button, der in einen JDialog liegt, ein JPanel in einen anderen Dialog erstellen. Wie kann man das machen.

Also so erscheint es mir i.wie am Sinnvollsten, doch es funktioniert nicht...


```
jButton1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {

               JPanel p = new JPanel();
               Verwalten v;   //Verwalten ist das andere Dialog - Fenster
               v.tp0.add(p); // tp0 ist ein JTappedPane wo ich gerne ein neues Panel erzeugen will
	       dispose();
     }
}
```

Kann vielleicht irgendjemand helfen??


----------



## XHelp (15. Jul 2010)

Naja, du brauchst die Referenz auf das Objekt. Wie du es machst, hängt natürlich stark von dem, was du gemacht hast.


----------



## Gast2 (15. Jul 2010)

> mit einen Button, der in einen JDialog liegt, ein JPanel in einen anderen Dialog erstellen.


Das Erstellen des JPanels und das hinzufügen sollte der Frame machen auf dem das Panel später auch liegen soll. Ansonsten verwurschtelst du deine Komponenten zu stark miteinander.
Ich würde in deiner ActionPerformed Methode einfach eine Methode aufrufen die das ganze dann in gang setzt:


```
verwalten.aendereJPanels();
```
verwalten ist dabei eine Referenz auf dein Verwalten-Frame. Hast du so eine Referenz schon irgendwo?


----------



## yax (15. Jul 2010)

nein habe ich noch nicht


----------



## Gast2 (15. Jul 2010)

Ok hier ist mal nen kleines Beispiel:
Mainframe hält hierbei ne Referenz auf den Frame den wir neu erstellen und anhand dieser Referenz kann man dann Methoden des Frames aufrufen und z.b. den Text ändern.


```
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
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.JLabel;
import javax.swing.JTextField;

public class Mainframe extends JFrame {

    public static void main(String[] args) {
        new Mainframe().setVisible(true);
    }

    /** hält die Referenz auf ein anderes Fenster */
    private AnotherFrame anotherFrame = null;

    public Mainframe() {
        super("Mainframe");

        setLayout(new GridLayout(3,1));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        
        JButton b1 = new JButton("Öffnen");
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (anotherFrame != null && anotherFrame.isVisible()) {
                    System.out.println("Fenster ist doch schon sichtbar...");
                    return;
                }

                anotherFrame = new AnotherFrame();
                anotherFrame.setVisible(true);
            }
        });
        add(b1);

        final JTextField textfield = new JTextField("Eingabe");
        add(textfield);

        JButton b2 = new JButton("Aendere Text");
        b2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (anotherFrame != null && anotherFrame.isVisible()) {
                    anotherFrame.aendereText(textfield.getText());
                } else {
                    System.out.println("Du musst erst den anderen Frame öffnen...");
                }
            }
        });
        add(b2);

        setPreferredSize(new Dimension(200, 200));

        pack();
    }

    class AnotherFrame extends JFrame {

        private JLabel infoLabel = new JLabel("Testtext");

        public AnotherFrame() {
            super("Anderes Fenster");

            setLayout(new BorderLayout());
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            setLocationRelativeTo(null);
            
            infoLabel.setFont(new Font("Arial", Font.BOLD, 18));
            add(infoLabel);
            
            pack();
            
        }

        public void aendereText(String text) {
            infoLabel.setText(text);
        }
    }
}
```


----------



## yax (15. Jul 2010)

Funktioniert das gleiche auch mit einen JDialog??


----------



## Gast2 (15. Jul 2010)

Jep


----------



## yax (15. Jul 2010)

okay


----------



## yax (15. Jul 2010)

Wie kann ich ein bereits bestehendes JLabel kopieren. Also wenn ich ein JLabel in eine JPanel habe, und ich habe ein neues JPanel und ich möchte das das gleiche JLabel drin haben. Wie kopiere ich dieses dann??


----------



## Gast2 (15. Jul 2010)

Neues JLabel erstellen und den selben Text draufsetzen


----------



## XHelp (15. Jul 2010)

Ich weiß nicht, ob es sinnvoll ist ein Forum als Chat zu benutzen. Für die Nachwelt ist es nicht besonders Hilfreich anschließend etwas zu finden.


----------



## yax (15. Jul 2010)

Aber ich habe so viele JLabels und da ist das i.wie zu viel aufwand immer ein neues zu erstellen


----------



## Gast2 (16. Jul 2010)

Hm, das hört sich für mich ein wenig nach nem falschen programmdesign an.
Was hast du damit denn genau vor?


----------



## Lexi (16. Jul 2010)

Ich habe mal vor längerer Zeit eine Klasse geschrieben, die "LabelLanguageManager" heißt. Ist wahrscheinlich nicht ganz ausgereift und auch nicht unbedingt sehr performant, aber so als Denkanstoß evtl gar nicht so schlecht.
Für jede Sprache wird eine .txt Datei angelegt die Key Value Paare enthält. Dem Konstruktor muss dann, je nach dem welche Sprache gewünscht ist, der Pfad zu der entsprechenden Datei übergeben werden.
Die Dateien sehen z.B. wie folgt aus:
en.txt:

```
OK§§§OK
Cancel§§Cancel
```

ger.txt:

```
OK§§§OK
Cancel§§§Abbrechen
```

Benutzen kann man das ganze etwa so:

```
LabelLanguageManager llm = new LabelLanguageManager("/path/to/ger.txt");
JButton btnOK = new JButton(llm.get("OK"));
// im Button steht nachher "OK"
JButton btnCanc = new JButton(llm.get("Cancel"));
// im Button steht nachher "Abbrechen"
```


```
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class LabelLanguageManager {
	private final Map<String,String> labels;
	private String separator;

	public LabelLanguageManager(File path){
		separator = "§§§";
		labels = new HashMap<String,String>();
		setLanguage(path);
	}

	public String get(String key){
		return labels.get(key);
	}

	public String getSeparator() {
		return separator;
	}

	public void put(String key,String value){
		labels.put(key, value);
	}

	public void setLanguage(File path) {
		BufferedReader reader;
		try {
			reader = new BufferedReader(new FileReader(path));
			String line = "";
			while(null != (line = reader.readLine())){
				String[]parts = line.split(separator);
				labels.put(parts[0], parts[1]);
			}
			reader.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void setSeparator(String separator) {
		this.separator = separator;
	}
}
```


----------



## eRaaaa (16. Jul 2010)

Klingt irgendwie nach einem nachgebautem ResourceBundle? 

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 13.4 Internationalisierung und Lokalisierung


----------



## yax (16. Jul 2010)

Okay, ich habs endlich geschafft.


----------



## yax (16. Jul 2010)

So, ich glaube, ich fange an zu nerven, oder???



Also, ich habe einen Button, der ein neues Panel in einen JTappedPane erzeugen soll. Und wenn ich auf den Button geklickt habe, erscheint auch ein neues Panel, doch wenn ich dieses Fenster schließe und wieder neu aufmache, ist das Panel weg. Wie löse ich dieses Problem

Mein Code:


```
final label la = new label();
		JPanel p2 = new JPanel();
		b1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				buttonPressed = true;
				p2.add(l1);
				tp0.add(p2);
			}
			
		});
		
		
		if( buttonPressed == true) {
			p2.add(la);
			tp0.add(p2);
		}
```


----------



## Bierhumpen (16. Jul 2010)

Nochmal auf den Button klicken.


----------



## yax (16. Jul 2010)

doch wenn ich am Panel etwas änder, dann muss ich das immer wieder neu machen...


----------



## Gast2 (16. Jul 2010)

> doch wenn ich dieses Fenster schließe und wieder neu aufmache, ist das Panel weg.


Wie schließt du denn das Fenster?
Wenn du es einfach unsichtbar machst (setVisible(false); ) und danach einfach wieder sichtbar, dann wird sich am Fenster nichts geändert haben. außer du reinitialisiert das fenster bei componentShow oder ähnliche späße


----------



## yax (16. Jul 2010)

Also das ist ein JDialog. Der schließt sich halt wenn ich auf x klicke.


----------



## Gast2 (16. Jul 2010)

Du kannst nem JDialog oder JFrame eine DefaultCloseOperation mitgeben. Damit er das Fenster einfach nur ausblendet setzt du diese auf HIDE_ON_CLOSE (ansonsten wird das komplette Fenster "zerstört"). Um den Dialog danach wieder anzuzeigen rufst du einfach nur setVisible(true); auf.


----------



## yax (16. Jul 2010)

Also dies Funktioniert auch nicht. Doch ich habe einen riesen großen Fehler gefunden. Und ich schreibe jetzt das ganze Programm mal neu


----------



## yax (17. Jul 2010)

So, wie kann ch denn jetzt, auswählen was er macht??

Code: 
	
	
	
	





```
@Override
			public void actionPerformed(ActionEvent arg0) {
				n1.setIstVerwendet1(false);
				if (n1.istVerwendet1 = true) {
					n1.setVisible(true);
					tp0.add(nk1);

				}else {
					System.out.println("Hello");
				}
			}

		});
```
Aslo ich möchte im Code gerne bestimmen, was gemacht werden soll. Ich habe es mit boolean und einer set-Methode ausprobiert, aber hat i.wie nicht geklappt.. 

Geht das vielleicht mit einer Switch-Anweisung??


----------



## Ruzmanz (17. Jul 2010)

> n1.istVerwendet1 = true



Grundlagen sollte man schon beherschen, bevor man anfängt etwas zu machen ... Mal von der Zuweisung abgesehen glaube ich, dass istVerwendet1 eine Methode ist.



> Geht das vielleicht mit einer Switch-Anweisung??



Nein, Switch geht nur mit int, byte und enum.


----------



## yax (17. Jul 2010)

also wird mir jetzt nicht geholfen???

Ich mein ich lerne ja noch, und da kann mir ja wohl geholfen werden...


----------



## Ruzmanz (17. Jul 2010)

Eine Zuweisung ist sowas:
variableA = true;

Ein Vergleich sieht so aus:
variableA == ture;


```
if (n1.istVerwendet1 == true) {
```



> Ich mein ich lerne ja noch, und da kann mir ja wohl geholfen werden...



Ich kann nur ein Zitat von einem sehr schlauen Mann verwenden, der etwas vor 10min gesagt hat:



> Mal von der Zuweisung abgesehen glaube ich, dass istVerwendet1 eine Methode ist.



Sry, aber mehr als Korrigieren und Kommentieren kann ich das auch nicht.


----------



## yax (17. Jul 2010)

Also ich weiß ja das istVerwendet1 eine Methode ist. Aber wie kann ich denn prüfen, ob istVerwendet1(true) ist, und dann soll er was ausführen. Sonst soll er was anderes ausführen. 

Mir erscheint am sinnvollsten eine if - Anweisung. Ich habe es jetzt mal so gemacht :


```
bNeu.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				n1.setIstVerwendet1(false);
				if (n1.setIstVerwendet1(false) == true) {
					n1.setVisible(true);
					tp0.add(nk1);

				}
			}

		});
```
Ich habe auch vieles anderes ausprobiert. Aber es kommt immer das falsche ergenbniss raus. Also nicht das was ich haben will.


----------



## Ruzmanz (17. Jul 2010)

```
if (n1.istVerwendet1() == true) {
```

Grundlagen. Das hat nichts mit "Weil ich lerne darf ich Fehler machen" zu tun.


----------



## yax (17. Jul 2010)

kann man mir nicht einfach sagen, wie ich das lösen kann???

Bitte Bitte Bitte


----------



## mjdv (17. Jul 2010)

Hat Ruzmanz doch oben schon getan


----------



## yax (17. Jul 2010)

achsoo. Ohh 

Na dann. Vielen vielen Dank.


----------



## yax (18. Jul 2010)

Okay, ich habs jetzt geschafft....


----------

