zwei JLabel stapeln in einem JPanel

Diskutiere zwei JLabel stapeln in einem JPanel im AWT, Swing, JavaFX & SWT Forum; Hallo, Ich habe ein JPanel in dem sich zwei JLabel mit den im Code gezeigten Bildern befinden. ich möchte das Bild "viertelNote.JPG" über dem...

  1. Dorsch
    Dorsch Neues Mitglied
    Hallo,

    Ich habe ein JPanel in dem sich zwei JLabel mit den im Code gezeigten Bildern befinden.
    ich möchte das Bild "viertelNote.JPG" über dem Bild "notenlinien.png" haben.
    Wie ich gelesen hatte gibt es dafür etwas wie: JLayeredPane.
    Aber dies bekomme ich irgendwie nicht hin.

    (In meinem eigentlichen Projekt habe ich noch einen Button mit dem ich das Notenbild verschieben kann, allerdings scheitert es an der hier erwähnten Anzeige.)

    Es würde mich freuen wenn ihr mir helfen könntet.


    Code (Java):
    package javatests;

    import java.awt.FlowLayout;
    import javax.swing.*;

    public class Stapeln extends JFrame {
     
        JLabel notenlinien = new JLabel(new ImageIcon("img/notenlinien.png"));
        JLabel note  = new JLabel(new ImageIcon("img/viertelNote.JPG"));
        JPanel panel = new JPanel();
     
        public Stapeln(){
            super("Bilder stapeln");
            initForm();
        }
     
        public void initForm(){
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setBounds(200,200,800,300);
            this.setLayout(new FlowLayout());
            panel.add(notenlinien);
            panel.add(note);
            this.add(panel);
        }
     
        public void showStapeln(){
            this.setSize(800,400);
            this.setVisible(true);
        }

     
    }
     
  2. Vielleicht hilft dir dieser Kurs hier weiter.
  3. Robat
    Robat Bekanntes Mitglied
    Ich glaube du würdest besser fahren, wenn du dir die Bilder zeichnen lässt anstatt mit JLabel zu arbeiten.
    So kannst du dir die Bilder direkt an den passenden X - / Y - Koordinaten zeichnen lassen.
     
  4. Dorsch
    Dorsch Neues Mitglied
    Gemessen an der Komplexität der Bilder wohl keine schlechte Idee. ;D
    Ich werde das mal ausprobieren und ggf. melde ich mich noch mal.

    Danke Robat und ein besinnliches Weihnachtsfest dir noch. :)
     
    Zuletzt bearbeitet: 24. Dez. 2017
  5. Dorsch
    Dorsch Neues Mitglied
    Ich habe an der Idee des Zeichnens weitergearbeitet und erfolgreich folgendes zusammen gebastelt:
    Code (Java):
    package javatests;

    import java.awt.*;
    import javax.swing.*;

    public class Stapeln extends JPanel {
     
       protected void paintComponent(Graphics g){
         
           super.paintComponent(g);
         
           //Graphics2D g2d = (Graphics2D) g;
         
           //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
         
           int move = 0;
           for(int i=0;i<5;i++){
         
           int y1 = move+100;
           int y2 = move+100;
         
           g.drawLine(100, y1, 900, y2);
         
           move+=15;
           }
           //repaint();
       }
    }
       
    Dann habe ich versucht bei meinem Projekt - Mit dem ich übrigens auch das MVC-Modell versuche zu lernen - diese Grafik mit einzubauen.
    Aber leider zeigt er mir die Notenlinien einfach nicht an.
    Das mit dem Button verknüpfte Bild funktioniert auch nur so, dass wenn ich den Button drück, ich das Fenster ziehen muss damit das Bild angezeigt witrd. (Auch das Notenbild werde ich Zeichnen sobald die Linien funktionieren)
    Im Folgenden meine derzeitige View:
    Code (Java):
    package notenschrift.view;

    import javax.swing.*;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.event.ActionListener;

    public class NotenschriftView extends JFrame {
     
     
        JButton SelectNoteC1 = new JButton("Note auswählen: C1");
        JPanel notenlinien = new JPanel(); // Hier war vorher "linien" geschachtelt
        JLabel viertelNote = new JLabel(new ImageIcon("img/viertelNote.JPG"));
        Notenlinien linien = new Notenlinien();
     
        public NotenschriftView(){
            super("Notenschrift");
            initForm();
        }
     
        private void initForm(){
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setBounds(0,0,1200,600);
            this.setLayout(new FlowLayout());
            //linien.setSize(1000,500);
            this.add(SelectNoteC1);
            this.add(linien); // Hier kommen die Linien rein
        }
     
        public void setNoten(int x, int y, int c, int a){
         
            this.add(viertelNote);
            //viertelNote.setLocation(50,200);
        }
     
        public void setSelectNoteC1(ActionListener l){
            this.SelectNoteC1.addActionListener(l);
        }
    }

    class Notenlinien extends JPanel {
        @Override
        protected void paintComponent(Graphics g){
         
           super.paintComponent(g);
         
           int move = 0;
           for(int i=0;i<5;i++){
         
           int y1 = move+100;
           int y2 = move+100;
         
           g.drawLine(100, y1, 900, y2); // Für JPanel: 1000x500
         
           move+=15;
         
         
           }
        }
    }
     
     
  6. Harry Kane
    Harry Kane Bekanntes Mitglied
    Notenlinien liegt in einem Container mit einem FlowLayout. Das FlowLayout weist jeder Komponente nur soviel Platz zu, wie diese über ihre preferredSize anfordert.
    Notenlinien hat keine Kindkomponenten. Deshalb sollte ihre "natürliche" preferredfSize 0,0 sein. Du musst getPreferredSize() so überschreiben, dass die Länge und Höhe deiner Partitur komplett sichtbar ist, in deinem Fall wäre das eine Dimension(1000,500).
     
  7. Dorsch
    Dorsch Neues Mitglied
    Damit hat es Tatsächlich funktioniert. :)
    Code (Java):
    linien.setPreferredSize(new Dimension(1000,500)); //Mindestgröße wegen FlowLayout definiert
    Im Sinne der Überschrift, ist dieses Thema damit erfolgreich gelöst. :)
     
  8. Wenn du Java lernen möchtest, empfehlen wir dir diesen Kurs hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

zwei JLabel stapeln in einem JPanel - Ähnliche Themen

Simple Kollisionskontrolle zweier jLabels
Simple Kollisionskontrolle zweier jLabels im Forum Spiele- und Multimedia-Programmierung
NullPointerException bei zweidimensionalem JLabel-Array
NullPointerException bei zweidimensionalem JLabel-Array im Forum Java Basics - Anfänger-Themen
Ein JLabel und eine JList untereinander (verzweifel)
Ein JLabel und eine JList untereinander (verzweifel) im Forum AWT, Swing, JavaFX & SWT
JLabel wird nicht angezeigt (bin verzweifelt!)
JLabel wird nicht angezeigt (bin verzweifelt!) im Forum AWT, Swing, JavaFX & SWT
Tiefe Kopie einer Zeile eines zweidimensionalen Arrays
Tiefe Kopie einer Zeile eines zweidimensionalen Arrays im Forum Java Basics - Anfänger-Themen
Thema: zwei JLabel stapeln in einem JPanel