# Schulprojekt und braucht hilfe



## Johnny919 (19. Nov 2009)

so moin erstmal
also ich brauche generel für dieses projekt hilfe (das pojekt ist ein schulprojekt und geht über 40 schulstunden ) so als kleine info 
als diese program soll ein anwendungprogramm um kunden daten für eine firma zu erfassen das ganze soll über eine datenbank laufen und mein problem dazu ist :
ich wollte nur ein hauptfenstermachen (jFrame) und wollte da für meine verschiedene funktionen immer jenachdem was ich anklicke das hauptpanel aus blenden und das gewählte einbelenden.
wollte aber die einzelden jpandels in externen classen schreiben so das mein code nicht zu durcheinander wird aber iwie bekomm ich das nicht hin das ich das einmal nur so mache das meine klass nur ein panel hat und das ich da das ausehen machen kann und auch nicht das das in mein hauptfenster erzeugt wird.
hoffe ihr versteh meinen standpunkt und mein problem 
wen nicht fragen würde mich auch mal freuen wen ihr hier öffters reinguckt weil ich bestimm noch mehr fragen werden habe 
ps: würde mich über einen beispielcode freuen 
schonmal danke im voraus


----------



## javimka (19. Nov 2009)

Johnny919 hat gesagt.:


> wollte aber die einzelden jpandels in externen classen schreiben so das mein code nicht zu durcheinander wird aber iwie bekomm ich das nicht hin das ich das einmal nur so mache das meine klass nur ein panel hat und das ich da das ausehen machen kann und auch nicht das das in mein hauptfenster erzeugt wird.


Diesen Satz verstehe ich leider nicht. Vielleicht wären ein paar Punkte und Grossbuchstaben nicht total fehl am Platz.


----------



## Ein Keks (19. Nov 2009)

echt ein wenig unverständlich 
hoffe ma ich hab dich richtig vestanden: du hast ein JFrame und verschiedene Klassen die von JPanel erben. Eins davon ist sozusagen das mainmenu von welchem man durch buttons auf eins der anderen wechselt. und du weißt nicht wie du diese JPanels addest.
wenn ja guck dir ma cardlayout an
oda weißt du nicht wie du die panel-klassen machen sollst?

oh man punkt und komma solln ja ne hilfe sein xD


----------



## Johnny919 (19. Nov 2009)

ohh tut mir leid.
also ich wollte damit sagen das, ich einen jPanel in einer 2.Klasse schreiben wollte und dann nur in mein 1.Klasse (der Hauptfenster) sicherbar machen wenn ich den dazugehörigen Butten klicke.
hoffe ich habe es verständlich ausgedrückt


----------



## Johnny919 (19. Nov 2009)

ja beiden einmal wie ich das adden soll.
Aber auch wie ich das Panel schreiben soll das das klapt.
tut mir leid merke ich mir fürs nächstemal


----------



## Johnny919 (19. Nov 2009)

aber dazu noch zu dem cardlayout Link.
Ich möchte nich als 2 Fenster haben sonder halt alles in eins, ist das überhaupt möglich ??
und auch so wie ich mir das vorgestelt habe ??


----------



## javimka (19. Nov 2009)

Das CardLayout ist dafür geeignet oder ansonsten habe ich hier eine Idee skizziert: http://www.java-forum.org/awt-swing-swt/90199-problem-erstellung-gui-fuer-routenplaner.html
Warum schreibst du keine formal korrekte Sätze? Nur noch Java-Syntax im Kopf?


----------



## Johnny919 (19. Nov 2009)

Tut mir leid aber iwie bin ich grade bischen genervt von meinen ellis.
ist keine wirkliche Entschuldigung


----------



## Johnny919 (19. Nov 2009)

booooor ja GENAU das suche ich, aber wie mach ich das jetzt das ich die Klassen nicht alle in einen quellcode habe ??
kann ich das genau so schreiben
oder muss das anderes??

und noch ne Frage was heist das "@Override" in dem ActionListener??

[JAVA=42]btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                setPanel(pnl2);
            }
        }[/code]

also genau ist das was ich wissen wollte.
Nur halt wie ich das mache dass, das in 2 verschiedenen codes steht.


----------



## Ein Keks (19. Nov 2009)

@Override ist eine Annotation die anzeigt das ne methode überschrieben wird (desweiteren wirft sie ne fehlermeldung wenn die methode nicht in der superklasse existiert is also ne kleine kontrolle)

und zu deinem klassenproblem: 
du hast deine versch. Panel die halt dann so aussehn: 

```
public class MyPanel extends JPanel{
   public MyPanel(){
       super();
       //andre Initialisierungen
   }
    
   //andre methoden
}
```
und deine MainKlasse:

```
public class MyFrame extends JFrame{

   private JPanel content;

  public MyFrame(){
    super("name");
    content = new JPanel(new CardLayout());
    content.add(new MyPanel(), "string id für dieses panel");
    //andre panel adden
    add(content);
    pack(); //setzt die größe auf die preferred size
    setVisible(true);
  }

   private void changePanel(String id){
      ((CardLayout)content.getLayout()).show(content, id);
   }
}
```


----------



## Johnny919 (19. Nov 2009)

würde dir das was ausmachen das mit AbsolutLayout zu schreiben??
weil mir wurde das in der Schule mit AbsolutLayout beigebracht und versteh das iwie nicht so ganz ??
also nur wen es dir nix ausmacht !!!


----------



## Ein Keks (19. Nov 2009)

meinst du mit AbsolutLayut das null-Layout?
geht denn vielleicht auch BorderLayout? (die layout-manager nehm einem verdammt viel arbeit weg xD )

```
public class MyFrame extends JFrame{
 
	private JPanel content;
	private JPanel myPanel, anotherPanel, someWierdPanel, optionPanel;
 
	public MyFrame(){
		super("name");
                setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		content = new JPanel(new BorderLayout());
		//BorderLayout ist das standartlayout von JFrame das gibt einfach den gesamten platz einer componente
		//alternativ null übergeben und dann den einzelnen panels setBound(0,0,width,height); wobei width und height vom content-Panel
		myPanel = new MyPanel();
		anotherPanel = new BlubbPanel();
		someWierdPanel = new CrazyHorsePanel();
		optionPanel = new HereAreNoOptionsPanel();
		add(myPanel); // das was zu erst gezeigt wird
		pack(); //setzt die größe auf die preferred size, alternativ setSize(breite,höhe);
		setVisible(true);
  }
  
	//aus dem beispiel von javimka
	private void setPanel(JPanel pnl) {
		System.out.println(pnl);
		content.removeAll();
     	content.add(pnl);
      	content.revalidate();
      	content.repaint();
 	}
}
```

sei froh das mein internet so lahm is und ich die ganze zeit auf meinen film warten muss xDD


----------



## javimka (19. Nov 2009)

Also wenn du das CardLayout verwenden willst, dann kannst du nicht noch ein anderen Layout verwenden, ausser du machst es innerhalb(!) von einem Panel. Wenn du den (meinen) Ansatz ohne CardLayout verwendest, dann kannst du das einfach setzen, allerdings habe ich noch nie etwas von diesen Layout gehört und auch Google scheint es nicht zu kennen. "Absolut" deutet darauf hin, dass das null-Layout gemeint sein könnte, also setLayout(null). Dann musst du die Positionen der Komponenten alle selbst angeben. Dazu gibt es Methode wie setLocation, setSize, setBounds usw.

//EDIT: Die verschiedenen Panels kannst du natürlich ausserhalb der Klasse des Hauptpanels schreiben. Sie brauchen einfach eine Referenz darauf, um jeweils das nächste Panel ins Hauptpanel zu schieben oder du schreibst die Klasse des Hauptpanels so um, dass dieses selber das nächste benötigte Panel finden kann.


----------



## Johnny919 (21. Nov 2009)

So danke klasse, habe alles so hinbekommen wir ich wollte.
Habe nur schon wieder ein problem wie kann ich ein Bild (.jgp) Datei in ein panel einfügen??


----------



## Ein Keks (21. Nov 2009)

du lädst es per folgendem Code (das lädt das image aus einem package):

```
BufferedImage backgroundImg = null;
try{
   backgroundImg = ImageIO.read(<Klassenname>.class.getRessource("/<package>.<name>.jpg"));
}catch(Exception e){
   e.printStackTrace;
}
```
und malst es dann in der paintComponent-methode des panels:

```
@Override
protected void paintComponent(Graphics g){
   g.drawImage(backgroundImg);
}
```


----------



## Johnny919 (21. Nov 2009)

ok danke aber in welche package soll das am besten sein ?? von meine Projekt??
und wie rufe ich die paint methode auf und wo ??
der will ja ein parametha übergeben haben weis aber nich was ich da reinschreien soll!!


----------



## HoaX (21. Nov 2009)

Nimm einfach ein JLabel und setz das Bild dort als Icon. Wird für dich das einfachste sein.


----------



## Johnny919 (21. Nov 2009)

und wie setzte ich diesen Icon??


----------



## hdi (21. Nov 2009)

Die API ist hilfreich!


----------



## Johnny919 (21. Nov 2009)

häää was soll mir dieser link sagen ??
Ein beispielcode währe mal nicht schlecht weil iwie ist das bischen komisch ^^


----------



## hdi (21. Nov 2009)

Dass es eine Methode setIcon(Icon) in der Klasse JLabel gibt. die API ist eine Übersicht aller Java-Klassen mit all ihren Methoden und deren Beschreibung. D.h. dort ist immer die erste Anlaufstelle wenn du dich fragst ob/wie man etwas mit einer Klasse machen kann.



> und wie setzte ich diesen Icon??


mit setIcon(Icon)


----------



## hdi (21. Nov 2009)

Ein_keks hat dir schon ein Code-Bsp gegeben wie du ein Image erzeugst. Du weisst, dass die Methode setIcon ein Icon will. D.h. API öffnen und links in der Liste nach "Icon" suchen. Das ist ein Interface, dort steht welche Klassen das implementieren. U.a. "ImageIcon". Draufklicken, und dann wirf mal nen Blick in die Konstruktoren dieser Klasse. Vllt gibt es ja das was nützliches...


----------



## Johnny919 (21. Nov 2009)

ok ich bin schon mal weitergekommen und habe es sogar verstanden^^
schonmal DANKE
aber iwie kommt das mit den Bild adden nicht hin wo muss das bild den am besten sein und was muss ich das schreiben 
weil so geht das nicht :

[JAVA=42]ImageIcon icon = createImageIcon("/Programm.logo.jpg","kp");[/code]

ich bekomme immer :* Couldn't find file: /Programm.logo.jpg*
und dazu eine *java.lang.IllegalArgumentException: input == null!*


----------



## Johnny919 (23. Nov 2009)

kann mir niemand sagen wo das Bild sein soll und wie genau ich den Link setzte


----------



## hdi (23. Nov 2009)

Ein_Keks hat dir den Code doch gegeben! 


```
BufferedImage backgroundImg = null;
try{
   backgroundImg = ImageIO.read(<Klassenname>.class.getRessource("/<package>/<name>.jpg")); // statt dem / zwischen package und name stand ein ".", das is falsch glaub ich?!
}catch(Exception e){
   e.printStackTrace;
}
```

Also zB haust du dein bild in ein package in deinem Projekt namens "bilder" oder sowas, und dann lädst du es wie oben beschrieben. Achte darauf dass die Endung natürlich auch übereinstimmen muss! Das ist auch case-sensitive! D.h. .JPG ist was anderes als .jpg


----------



## Johnny919 (23. Nov 2009)

also ich bin grade kurz vom verzweifeln 
ich arbeite ja mit eclips und da habe ich eine porjekt das heist ___Mittelstufenprojekt___
und muss das bild habe ich in semtlichen ordnern aber trotdem geht das nicht und ich habe auch schon alles an links ausgetestet
HILFE


----------



## javimka (23. Nov 2009)

Kriegst du eine Exception oder wie zeichnet sich das aus, dass es nicht funktioniert?


----------



## Johnny919 (23. Nov 2009)

wie oben schon mal genant 
einmal sagt mir :

ich bekomme immer : Couldn't find file: /Programm.logo.jpg
und dazu eine java.lang.IllegalArgumentException: input == null!

aber die exception ist ja nur wegen dem falschen link


----------



## hdi (23. Nov 2009)

Poste mal deinen Code wo du das Bild laden willst, und deine Package-Struktur


----------



## Johnny919 (23. Nov 2009)

mache ich gerne wen du mir sagst was die package sturkut ist und wie ich die poste
aber nochmal danke für die hilfe


----------



## hdi (23. Nov 2009)

Arbeitest du mit einer IDE oder normal mit Texteditor? Mit package Struktur meine ich: Wie sind deine Klassen in packages eingeteilt? Du wirst ja oben in deinen Klassen sowas haben wie:



> package xy;



Oder nicht? Wenn nein hast du nur ein default package, dann funktioniert das laden der Bilder auch nicht. Du brauchst mindestens ein betiteltes package.


----------



## Johnny919 (23. Nov 2009)

ja oben habe ich 
package Programm;
aber wo muss ich da das bild impotieren ??


----------



## hdi (23. Nov 2009)

zB in dieses Package. und dann 

```
backgroundImg = ImageIO.read(<Klassenname>.class.getRessource("/deinbild.jpg"));
```
falls die Klasse wo du das machst eben im Package Programm ist. Ansonsten musst du den Pfad dahin angeben, siehe wieder der Code von Ein_Keks


----------



## Johnny919 (23. Nov 2009)

ok ich glaube ich habe es hinbekommen nur jetzt habe ich bemerkt das ich vergessen habe das backgroundImg iwie in iwas reinzupacken
wie mach ich das den jetzt in ein label??


----------



## hdi (23. Nov 2009)

Liest du die Antworten überhaupt? Darüber haben wir doch weiter oben schon diskutiert. API usw, klingelt's?


----------



## Johnny919 (23. Nov 2009)

also ich bin wieder am verzweifeln ich schreib einfach mal das was ich gamcht habe 
hoffe mal ihr findet den fehler:


```
ImageIcon icon = createImageIcon("/Programm/logo.jpg","kp");
	  jLabel1logo.setIcon(icon);
```
und das meine createImageIcon Methode:

```
private ImageIcon createImageIcon(String path, String description) {
		java.net.URL imgURL = Projekt.class.getResource(path);
		if (imgURL != null) {
			return new ImageIcon(imgURL, description);
		} else {
			System.err.println("Couldn't find file: " + path);
			return null;
		}
	}
```

aber hier kommt immer egal was ich mache immer nur 

*Couldn't find file: /Programm/logo.jpg*


----------



## hdi (23. Nov 2009)

In welchem Package liegt die Klasse Projekt? 
Ich hab das so wie du jetzt noch nie gemacht, kann also nicht sagen ob das falsch ist oder nicht. Zumindest machst du es nicht so wie von Ein_Keks vorgeschlagen...


----------



## Johnny919 (23. Nov 2009)

naja nach langen ausprobieren hab ich das jetzt hinbekommen,
bin aber zugleich auf das nächste Problem gestossen und zwar:

ich kann ich während das prozesses einer jComboBox ein item hinzufügen
ist das überhaupt möglich ??
weil mit meiner lösung kann man nur einen neuen item hinzufügen !!
meine Aufgabe ist es aber mehre anlegen zu können ??


----------



## hdi (23. Nov 2009)

Du brauchst ein Model für deine Combobox, wenn du die Daten zur Laufzeit ändern willst. Ist gar nicht so leicht: 
How to Use Combo Boxes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## Johnny919 (24. Nov 2009)

versteh ich wie nicht naja egal. Trotzdem danke!!!
aber habe noch ne frage ist es moglich mit java ein word (.doc) oder pdf (.pdf) Datei zu erzeugen??
wen das nicht mödlich ist kann man ein word oder pdf dokument öffnen ihn aber werte übergeben??


----------



## javimka (24. Nov 2009)

Das kann man sicherlich, wenn man weiss, wie diese Dateien aufgebaut sind. Da müsstest du wohl die Spezifikation lesen und dir dann die Arbeit machen, solche Dateien korrekt erzeugen zu können.


----------



## Johnny919 (24. Nov 2009)

ja und wie kann ich mir das aneignen ??
bespiele ??
seiten??


----------



## hdi (24. Nov 2009)

Also ich vermute mal stark dass du das selber nicht hinkriegst. Das hat nicht mal was mit deinen Java-Kenntnissen zu tun als eher mit deinen Kenntnissen mit man mit Bytes arbeitet, und was es bei solchen Files sonst noch so für Stolpersteine gibt. Ich glaube es ist wesentlich schwerer ein word dokument auszulesen, geschweige denn zu erstellen, als man denkt.

Also um deine Frage zu beantworten: Besser gar nicht! Google nach Frameworks/Libs, irgendjemand wird das sicherlich schon gemacht haben, und dann musst du lediglich deren API oder Beispiele anschauen, das sollte dann gehen.


----------



## Johnny919 (24. Nov 2009)

jo Danke
aber unter franmeworks/libs kommt zemlich viel raus hast du vllt einen genaues begriff dafür??


----------



## hdi (24. Nov 2009)

OpenOffice.org Developer's Guide - OpenOffice.org Wiki

damit kannst du anscheinend .doc und auch .pdf dokumente erzeugen/einlesen.


----------



## Johnny919 (24. Nov 2009)

sowas wie ein quellcode bekommst du auch noch zusammen??
ich finde nähmlich nix??


----------



## gizmo (24. Nov 2009)

Schau dir POI und iText an.


----------



## Johnny919 (24. Nov 2009)

bei was anschauen, hier im Forum??


----------



## gizmo (24. Nov 2009)

Google?!


----------



## Johnny919 (24. Nov 2009)

jo soll jetzt nicht negativ sein aber iwie steht da nur das das ein tool dafür ist 
aber wie/ was das ist genau woher ich das bekomme und wie ich das benutze bekommt man nicht raus.

kann man mir da weiter helfen ??


----------



## gizmo (24. Nov 2009)

Also bei iText (falls du das meinst) gibt es sowohl Doku als auch Downloads. POI scheint bei Worddokumenten noch nicht besonders weit  zu sein. Wenn du aber nach "java word" googlest, solltest du etwas finden. Wenn du nicht ein komplettes Dokument mit Java erzeugen willst, sondern z.B. nur einen Serienbrief, dann kannst du auch den Brief erstellen und als Datenquelle eine CSV-Datei angeben. In Java änderst du dann nur diese.


----------



## Johnny919 (24. Nov 2009)

genau sowas hatte ich vor mit dem serienbrief.
hättest du vllt einen beispiel code oder ein beispiel dafür ??
das ich mir das mal angucken kann ??
schonmal danke


----------



## gizmo (24. Nov 2009)

Habe leider kein Beispiel zur Hand. Schau dir an, was CSV ist, erstelle eines, mache einen Serienbrief auf Basis des CSVs. CSV-Dateien zu schreiben ist simpel...

Ansonsten sollte Google sowohl zu CSV als auch zu Serienbriefen nützliche Resultate bringen.

Falls du nicht weisst wie man in Java mit Files arbeitet, schau dir die Klassen File, FileOutputStream und BufferedWriter an. Oder lies das entsprechende Kapitel in der Javainsel.


----------



## Johnny919 (24. Nov 2009)

ok Danke schonmal !!!
würde mich trotzdem über einen beispeil code freuden !!!
bekommt iwer bestimmt hin.


----------



## Johnny919 (27. Nov 2009)

kein quellcode dafür aufzubringen??


----------

