• 27.05.2024, 01:26
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Re: Kalendergenerator mit Java in GUI

Sonntag, 15. Januar 2006, 13:43

so, ich hab mal versucht das in meinen Kalendergenerator einzubinden, aber irgendwie zeigt er nix an. eigentlich müsste doch der Hintergrund jetzt grau sein, wie beim Beispiel von Crushcoder!?

hier Datei

Re: Kalendergenerator mit Java in GUI

Sonntag, 15. Januar 2006, 14:03

das liegt daran das du ein Frame benutzt, im beispiel aber eine JTextArea.

Frame leitet sich von Component ab, während JTextArea sich von JComponent ableitet.
und Component hat die methode paintComponent nicht, nur eine paint-methode.

also solltest du entweder deine klasse von jframe ableiten oder die paint-methode überschreiben.

edit: ups, jframe ist auch nicht von jcomponent abgeleitet, deswegen wird da auch eine weitere komponente im beispiel eingefügt.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Kalendergenerator mit Java in GUI

Sonntag, 15. Januar 2006, 14:18

öhm....hää? ::)

Re: Kalendergenerator mit Java in GUI

Sonntag, 15. Januar 2006, 14:38

Zitat von »Jogibär«

öhm....hää? ::)

Guck dir mal die Java Klassenbibliothek an und deren Vererbungshirachie ;)

Re: Kalendergenerator mit Java in GUI

Sonntag, 15. Januar 2006, 14:44

hehe.

in dem beispiel wird ja die methode paintComponent überschrieben.

Quellcode

1
2
3
4
public void paintComponent (Graphics g) {
        g.drawImage(grayImage, 0, 0, this);
        super.paintComponent(g);
      }

an dieser stelle wird drawImage aufgerufen damit das bild gezeichnet wird.
danach wird die methode paintComponent der abgeleiteten klasse aufgerufen, also von JTextArea.paintComponent, um alles andere zu zeichnen.

bei der klasse Frame gibt es die methode aber garnicht, deine methode wird einfach nie aufgerufen, also wird auch nichts gezeichnet.

das sieht man in der api:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Frame.html
Frame leitet sich von "java.awt.Window" ab, das von "java.awt.Container".
Unter "Methods inherited from class ..." sieht man immer welche methoden abgeleitet wurden.
dort gibt es kein paintComponent.

bei JTextArea findet sich dort aber paintComponent, abgeleitet aus "javax.swing.JComponent"
da gibts auch das "setOpaque" das benutzt wird.

---
grundsätzlich: tu dir und anderen bitte den gefallen und schreibe variablen klein!
und benutze auch besser keine variablen namen die einem klassennamen entsprechen.

es machts nicht einfacher in der klasse "Kalendergenerator" eine variable "Kalendergenerator" zu benutzen.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Kalendergenerator mit Java in GUI

Sonntag, 15. Januar 2006, 15:49

ich hab jetzt hin und her probiert, aber mit der methodik funktioniert es nicht.

das bild wird zwar im hintergrund gezeichnet, aber die anderen komponenten darauf lassen das hintergrundbild nicht durchscheinen.

edit:
harhar, hörthört!! ich habe es geschafft!

ich hab erstmal eine zweite klasse geschaffen für das bild:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class KalenderPanel extends JPanel
{
      private final ImageIcon imageIcon = new ImageIcon("your.jpg");
      
      public KalenderPanel()
      {
            super();
            setOpaque(false);
      }
      
      public void paintComponent(Graphics g)
      {
            g.drawImage(imageIcon.getImage(), 0, 0, this);
            super.paintComponent(g);
      }
}


man sieht schonmal: man kann nun einfach elemente auf dieses panel setzen.

deine klasse sieht nun so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public class KalenderGen extends Frame implements ActionListener {


    int Monat0[] = new int[12];
    
    
      JLabel eingabe_Label = new JLabel("<html><body><h3>Bitte geben Sie die Jahreszahl ein:</h3></body></html>");
      JLabel Monatueberschrift[] = new JLabel[12];
      JLabel Tage[][] = new JLabel[49][12]; // CHANGED
      String eingabe_text, Tage_String;
      String Monatname[] = {"Januar", "Februar", "M‰rz", "April", "Mai", "Juni", "Juli","August","September","Oktober","November","Dezember"};
      String Wochentag[] = {"Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"};



      TextField eingabe = new TextField("");
      Button b1 = new Button("generiere Kalender");
      
      int c1, c2, c4, c5, c6, c7, c8, eingabe_zahl, tag, ausgabe_zahl, jahr,Anzahl_Tage, wochentagNr,wochentagz;
      int Monatstage[] = {3,0,3,2,3,2,3,3,2,3,2,3};
      boolean schaltjahr;

      JPanel Monat_out[] = new JPanel[12]; // CHANGED
      JPanel Monat[] = new JPanel[12]; // CHANGED
      JPanel Kalendergenerator = new JPanel(); // CHANGED
      JPanel Oben = new JPanel(); // CHANGED
      
      public KalenderGen(){
            super("Kalendergenerator");
            
            JPanel mainPanel = new KalenderPanel(); // NEW
            mainPanel.setLayout(new BorderLayout()); // NEW
            
            addWindowListener(new FensterLauscher());
            b1.addActionListener(this);
            b1.setBackground(Color.blue);
            b1.setForeground(Color.white);
            
            Oben.setLayout(new GridLayout(1,5,5,10));
            Oben.setOpaque(false); // NEW
            Kalendergenerator.setLayout(new GridLayout(3,4,30,10));
            Kalendergenerator.setOpaque(false); // NEW
            mainPanel.add("North",Oben);
            Oben.add(eingabe_Label);
            Oben.add(eingabe);            
            Oben.add(b1);
            mainPanel.add("South",Kalendergenerator);
            
            
      
            for(int i=0; i<=11; i++){
                  Monat_out[i] = new JPanel(); // CHANGED
                  Monat_out[i].setOpaque(false); // NEW
                  Monat_out[i].setLayout(new BorderLayout());
                  Kalendergenerator.add(Monat_out[i]);
                  Monat[i] = new JPanel(); // CHANGED
                  Monat[i].setOpaque(false); // NEW
                  Monat[i].setLayout(new GridLayout(7,7,3,3));
                  Monat_out[i].add("South",Monat[i]);
                  Monatueberschrift[i] = new JLabel("<html><body><h4>"+Monatname[i]+"</h4></body></html>");
                  Monat_out[i].add("North",Monatueberschrift[i]);
                  }            
            
            for (int mon=0; mon<=11; mon++){
                  for (int f=0; f<=48; f++){
                        Tage[f][mon] = new JLabel("  "); // CHANGED
                        Tage[f][mon].setOpaque(false); // NEW
                        Monat[mon].add(Tage[f][mon]);
                        }
                  }
            
            this.add(mainPanel);
            
            }

        
      
      [...]
            
            
      public static void main(String[] args) {
            Kalendergenerator fenster = new Kalendergenerator();
            fenster.pack();
            fenster.setSize(900, 800);
            // fenster.setLayout(new BorderLayout()); // CHANGED
            fenster.show();      
            }

[...]


neue zeilen habe ich mit "NEW" markiert, änderungen mit "CHANGED", den rest musst du selber reinkopieren, der beitrag war sonst zu lang.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.