LayoutManager NullLayout überlappende Labels werden nicht angezeigt

alex_fairytail

Mitglied
Hallo Ihr!

Ich habe diesmal ein Problem mit dem NullLayout. Ich habe ja bereits die Frage gestellt wegen des Banknotenalgorithmus, der funktioniert soweit ganz gut.
Für alle dies verpasst haben: Ich wollte einen Betrag in Schweizer Banknoten aufteilen, grösste zuerst (also nicht für 500 Franken 5 Hunderter sondern 2 Zweihunderter und einen Hunderter).
Jetzt will ich das ganze in einem Fenster darstellen und zwar folgendermassen: Jede Banknote die angezeigt wird verbreitert das Fenster ein bisschen, da sie ja alle nebeneinander angezeigt werden.
Jenachdem wieviele von jeder Banknote angezeigt werden, möchte ich überlappende Labels haben.
Beispiel: bei 3100 Schweizer Franken wären das 3 Tausender und 1 Hunderter. Nun möchte ich in dem Fenster die 3 Tausender überlappend dargestellt (um 10 Pixel oder so) und daneben den Hunderter.
Das funktioniert auch fast, Tausender und Hunderter werden nebeneinander dargestellt, von den überlappenden Tausendern erscheint jedoch immer nur der Letzte (je mehr Tausender desto weiter unten, die versetzte Darstellung scheint also eigtl. auch zu klappen).

Printscreen davon ist angehängt.

Hier der Java Code der Klasse, Aufruf mittels
Java:
Geldausgabe test = new Geldausgabe(); test.ausgeben(3100);


Hier der Quelltext der Klasse:

Java:
package bancomat;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;


public class Geldausgabe {
    
        private JDialog geldFenster = new JDialog(); // Fenster initialisieren
        private JPanel geld_panel = new JPanel(); // Panel das die Geldlabels beinhaltet initialisieren
        
        private static int[] scheine = {1000, 200, 100, 50, 20, 10};
        private int[] anzScheine = new int[scheine.length];
        
        private int fensterBreiteMultiplikator = 0; // Wird verwendet, um die Grösse des Fensters der Anzahl Noten anzupassen

        // Labels für die Banknoten
        private JLabel[] templabelarray = new JLabel[6];
        private JLabel[][] displabelarray = new JLabel[6][10];

        // BufferedImages um die Banknotenbilder zu laden
        private BufferedImage[] iconarray = new BufferedImage[6];



	public void ausgeben(int betrag) {
            // Berechnen, wieviele Scheine es wovon braucht.
            anzScheine = berechneAnzGeldscheine(betrag);


            // Fenster mit GridBagLayout erstellen
            geldFenster.setDefaultCloseOperation( JFrame.HIDE_ON_CLOSE );
            geldFenster.setTitle("Geldausgabe:");
            geld_panel.setLayout( null );

            // Images aus dem Ressources Directory auslesen
            try{
                iconarray[5] = ImageIO.read(new File("ressources\\10fr.jpg"));
                iconarray[4] = ImageIO.read(new File("ressources\\20fr.jpg"));
                iconarray[3] = ImageIO.read(new File("ressources\\50fr.jpg"));
                iconarray[2] = ImageIO.read(new File("ressources\\100fr.jpg"));
                iconarray[1] = ImageIO.read(new File("ressources\\200fr.jpg"));
                iconarray[0] = ImageIO.read(new File("ressources\\1000fr.jpg"));
            }catch(IOException e){
                System.out.println("IOException while reading Bankoten-Images:");
                System.err.println(e);
            }

            for (int i = 0; i < anzScheine.length; i++) {
                if(anzScheine[i] > 0){
                    fensterBreiteMultiplikator++;
                    //labelarray[i] = new JLabel("x"+anzScheine[i]);
                    templabelarray[i] = new JLabel("");
                    templabelarray[i].setIcon( new ImageIcon(iconarray[i]));

                    for(int c = 0; c < anzScheine[i]; c++){
                        displabelarray[i][c] = templabelarray[i];
                        //addComponent(geld_panel, nl, displabelarray[i][c], i, c, 1, 1, 0.0, 0.0, 10, 10,  0, i*10+10, 0, 0);
                        displabelarray[i][c].setBounds((fensterBreiteMultiplikator-1)*210+c*10, 10+c*10, 150, 330 - i*15);
                        geld_panel.add(displabelarray[i][c]);
                    }
                }
            }


            

            geldFenster.add(geld_panel);
            geldFenster.setSize( fensterBreiteMultiplikator*200, 400 );
            geldFenster.setResizable(false);
            geldFenster.setVisible(true);


	}


        /**
         * Die Methode addComponent wird verwendet, um Teile eines Swing-GUIs einfacher einbinden
         * zu können. Man kann der Methode nur das Panel wo die Komponente reinkommen soll,
         * das entsprechende Layout (hier GridBag), die Komponente und die Parameter dazu über-
         * geben und dann wird es eingebunden.
         */
        void addComponent( JPanel cont,
                            GridBagLayout gbl,
                            JLabel c,
                            int x, int y,
                            int width, int height,
                            double weightx, double weighty,
                            int argipadx, int argipady,
                            //int arganchor,
                            int topinset,
                            int leftinset,
                            int bottominset,
                            int rightinset)
        {
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = x; gbc.gridy = y;
            gbc.gridwidth = width; gbc.gridheight = height;
            gbc.weightx = weightx; gbc.weighty = weighty;
            gbc.ipadx = argipadx; gbc.ipady = argipady;
            //gbc.anchor = arganchor;
            gbc.insets = new Insets(topinset ,leftinset,bottominset,rightinset);
            gbl.setConstraints( c, gbc );
            cont.add( c );
        }


        /**
         * Die Methode geldscheine gibt einem von einem
         * übergebenen Betrag die Aufteilung in Geldscheine
         * als integer Array zurück (Stelle 0 = 1000er,
         * Stelle 1 = 200er usw.).
         * Diese Logik wurde der Übersicht halber in eine Methode
         * ausgeklammert, nicht weil sie mehrfach verwendet wird.
         */
        private int[] berechneAnzGeldscheine(int betrag){
                int[] anzahl = new int[scheine.length];
                while(betrag!=0){

                    for(int i=0; i < scheine.length; i++){
                        if(scheine[i] <= betrag){
                            anzahl[i]++;
                            betrag-=scheine[i];
                            i--;
                        }

                    }
                }
		return anzahl;
		
	}
}
 

Anhänge

  • bla.JPG
    bla.JPG
    30,3 KB · Aufrufe: 29

Volvagia

Top Contributor
Java:
if(anzScheine[i] > 0){
	templabelarray[i] = new JLabel(new ImageIcon(iconarray[i]));
	for(int c = 0; c < anzScheine[i]; c++){
		displabelarray[i][c] = templabelarray[i];
		displabelarray[i][c].setBounds((fensterBreiteMultiplikator-1)*210+c*10, 10+c*10, 150, 330 - i*15);
		geld_panel.add(displabelarray[i][c]);
	}
}

Du verwendest ja für jeden Geldschein das selbe Label. :eek:
btw. kriegt man von den Geld keine Alpträume? :shock:
 

alex_fairytail

Mitglied
Java:
if(anzScheine[i] > 0){
	templabelarray[i] = new JLabel(new ImageIcon(iconarray[i]));
	for(int c = 0; c < anzScheine[i]; c++){
		displabelarray[i][c] = templabelarray[i];
		displabelarray[i][c].setBounds((fensterBreiteMultiplikator-1)*210+c*10, 10+c*10, 150, 330 - i*15);
		geld_panel.add(displabelarray[i][c]);
	}
}

Du verwendest ja für jeden Geldschein das selbe Label. :eek:
btw. kriegt man von den Geld keine Alpträume? :shock:

Ne das geht ;) auch wenn ichs daneben finde einen Hitler-Sympathisanten auf die 10er Note zu drucken...

Wieso meinst du dasselbe Label? displabelarray[c] ändert sich ja bei jedem Durchlauf der innersten for-Schleife, c wird immer um eins hochgezählt, dann ist das doch ein neues label? ???:L

Edit: habs gesehen. So gehts:

Java:
            for (int i = 0; i < anzScheine.length; i++) {
                if(anzScheine[i] > 0){
                    fensterBreiteMultiplikator++;
                    //labelarray[i] = new JLabel("x"+anzScheine[i]);
                    //templabelarray[i] = new JLabel("");
                    //templabelarray[i].setIcon( new ImageIcon(iconarray[i]));

                    for(int c = anzScheine[i]; c > 0 ; c--){
                        displabelarray[i][c] = new JLabel("");
                        displabelarray[i][c].setIcon( new ImageIcon(iconarray[i]));
                        //addComponent(geld_panel, nl, displabelarray[i][c], i, c, 1, 1, 0.0, 0.0, 10, 10,  0, i*10+10, 0, 0);
                        displabelarray[i][c].setBounds((fensterBreiteMultiplikator-1)*210-c*10, 10-c*10, 150, 330 - i*15);
                        geld_panel.add(displabelarray[i][c]);

                    }
                }
            }

DankeDankeDankeDankeDanke :)
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Das würde für die anderen Scheinarten genauso wenig funktioneren, wenn man mehr als einen Schein hat. Da Du pro Scheinart immer das selbe Label nutzt und immer weiter nach unten verscheibst.

Ich würde die Bilder einfach nur zeichnen, statt mit Labels und Co zu arbeiten.
 

alex_fairytail

Mitglied
Das würde für die anderen Scheinarten genauso wenig funktioneren, wenn man mehr als einen Schein hat. Da Du pro Scheinart immer das selbe Label nutzt und immer weiter nach unten verscheibst.

Ich würde die Bilder einfach nur zeichnen, statt mit Labels und Co zu arbeiten.

Ne geht schon, wie ichs gemacht habe kannst du ja oben lesen, so funktionierts nicht schlecht und da das Fenster eh statisch ist ist es ok :)

danke vielmals!!

[/closed]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Swing Nulllayout AWT, Swing, JavaFX & SWT 9
A Automatische anpassung im NullLayout AWT, Swing, JavaFX & SWT 10
GUI-Programmer LayoutManager NullLayout - Ist es auch in diesem Fall schlecht? AWT, Swing, JavaFX & SWT 3
T NullLayout verwenden, oder nicht? AWT, Swing, JavaFX & SWT 9
H Nulllayout in ein anderes Layout AWT, Swing, JavaFX & SWT 5
V Nulllayout und wie auf Resizen reagieren? AWT, Swing, JavaFX & SWT 4
L Größe von Komponenten im Nulllayout mit der Maus verändern. AWT, Swing, JavaFX & SWT 2
G NullLayout: "Überlappung von Komponenten" AWT, Swing, JavaFX & SWT 15
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
N überlappende JPanels AWT, Swing, JavaFX & SWT 2
M JavaFX Abstand zwischen AnchorPane und Labels in dem HBox halten AWT, Swing, JavaFX & SWT 1
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
S Labels abfragen AWT, Swing, JavaFX & SWT 6
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
K Swing labels anpassen AWT, Swing, JavaFX & SWT 1
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
M Gui-Form alle Labels anzeigen AWT, Swing, JavaFX & SWT 4
Z Window Builder - Labels mit setText befüllen AWT, Swing, JavaFX & SWT 11
X Swing Per Button die Labels und Textfelder auslesen AWT, Swing, JavaFX & SWT 8
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Buttons/Labels auf GUI positionieren AWT, Swing, JavaFX & SWT 2
X Swing setContentPane verdeckt mir alle Buttons Labels etc... AWT, Swing, JavaFX & SWT 14
D Wie kann ich Buttons und Labels besser anordnen AWT, Swing, JavaFX & SWT 4
V JTabbedPane Eingefügte Labels verschoben AWT, Swing, JavaFX & SWT 2
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
K Hilfe bei Labels AWT, Swing, JavaFX & SWT 3
K richtiges Ausrichten mehrerer Labels AWT, Swing, JavaFX & SWT 3
R Größe eines Labels bei GridBagLayout festlegen AWT, Swing, JavaFX & SWT 9
S Swing Positionierung eines Labels in einem Panel AWT, Swing, JavaFX & SWT 2
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
A Swing JFrame vergrößert sich immer bei setText() eines Labels AWT, Swing, JavaFX & SWT 3
D LayoutManager GridLayout, 2 labels nebeneinander AWT, Swing, JavaFX & SWT 8
B bin am verzweifeln, will auf knopfdruck durch ne überprüfung die labels unsichtbar machen AWT, Swing, JavaFX & SWT 2
K Swing Labels & Buttons auf Frame AWT, Swing, JavaFX & SWT 8
D Swing update eines Labels nicht sichtbar AWT, Swing, JavaFX & SWT 9
M AWT TextFelder und Labels nicht ausgerichtet AWT, Swing, JavaFX & SWT 6
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
L Labels sichtbar - JFreeChart AWT, Swing, JavaFX & SWT 5
N Formular mit GridBaglayout und Abstände von Labels AWT, Swing, JavaFX & SWT 2
M Labels in ScrollPane mit Linie verbinden AWT, Swing, JavaFX & SWT 2
P SWT Composite und viele Labels AWT, Swing, JavaFX & SWT 10
G Frage zu Labels mit html AWT, Swing, JavaFX & SWT 3
S Labels und Button übereinander --> Reihenfolge? AWT, Swing, JavaFX & SWT 4
G Text eines Labels verändern? AWT, Swing, JavaFX & SWT 4
G Button vor Labels? AWT, Swing, JavaFX & SWT 5
H Labels mit setter-Methode modifizieren AWT, Swing, JavaFX & SWT 9
T Warum nehmen diese Labels die Hintergrundfarbe nicht an? AWT, Swing, JavaFX & SWT 6
T Labels gleichzeitig bewegen und anklicken AWT, Swing, JavaFX & SWT 3
S Position von Labels, Buttons, etc. festsetzen und Scrollen AWT, Swing, JavaFX & SWT 4
A Zeichnen auf zwei Labels. Geht nit AWT, Swing, JavaFX & SWT 7
D Zurücksetzen des Labels funtioniert nicht AWT, Swing, JavaFX & SWT 6
Landei Labels in Box linksbündig ausrichten AWT, Swing, JavaFX & SWT 15
P Hintergrund eines Labels/Panels setzen AWT, Swing, JavaFX & SWT 3
G der sinn von labels/jlabels ? AWT, Swing, JavaFX & SWT 3
L Labels verschwinden! AWT, Swing, JavaFX & SWT 10
D JPanlels und Labels. AWT, Swing, JavaFX & SWT 7
T Labels verschieben / Flackern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben