tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
379
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    tecnique tecnique ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    Hallo,

    Ich habe ein Problem mit der Darstellung von JPanels. Da die Anwendung in welcher ich das
    Problem bekommen habe recht komplex ist, habe ich das Wesentliche mal in ein Testprojekt
    geschrieben.
    Hier nun erstmal der Code. Die Fehlerbeschreibung kommt dann danach.

    Klasse PanelTestMain
    Code :
    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
    
    package panelTest;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class PanelTestMain {
        
        static JPanel pMain, pLeft;
        
        public static void main(String[] args){
            JFrame f = new JFrame("Test");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(600,400);
            f.setLayout(new BorderLayout());
            
            pMain = new JPanel();
            pMain.setBackground(Color.RED);
            pMain.setLayout(new BorderLayout());
            f.getContentPane().add(pMain, BorderLayout.CENTER);
            
            pLeft = new LeftPanel();
            pMain.add(pLeft, BorderLayout.WEST);
            
            f.setVisible(true);
        }
        
    }

    Klasse LeftPanel

    Code :
    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
    
    package panelTest;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
     
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class LeftPanel extends JPanel {
     
        static JPanel leftMiddle, pStationList;
        
        public LeftPanel(){
            this.setOpaque(false);
            this.setPreferredSize(new Dimension(250,25));
            this.setLayout(new BorderLayout());
            
            JLabel lLeftTop = new JLabel("Top");
            this.add(lLeftTop, BorderLayout.NORTH);
            
            JLabel lLeftBottom = new JLabel("Bottom");
            this.add(lLeftBottom, BorderLayout.SOUTH);
            
            leftMiddle = new LeftMiddlePanel();
            this.setPreferredSize(new Dimension(250,10));
            this.add(leftMiddle, BorderLayout.CENTER);
        }
        
    }

    Klasse LeftMiddlePanel

    Code :
    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
    
    package panelTest;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    import javax.swing.JPanel;
     
    public class LeftMiddlePanel extends JPanel {
     
        static JPanel pLeftMenuContent;
        
        public LeftMiddlePanel(){
            this.setLayout(new BorderLayout());
            pLeftMenuContent = new LeftMenuContent();
            this.add(pLeftMenuContent, BorderLayout.CENTER);
        }
        
        public void paintComponent(Graphics g) {
            super.paintComponents(g);
            Graphics2D g2 = (Graphics2D) g;
            int width=this.getWidth();
            int height=this.getHeight();
            GradientPaint gp1 = new GradientPaint(width, 0, new Color(100,100,100), width,
                    height, new Color(200,200,200), false);
            g2.setPaint(gp1);
            g2.fillRect(0,0,width,height);
        }
        
    }

    Klasse LeftMenuContent

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    package panelTest;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
     
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class LeftMenuContent extends JPanel {
     
        public LeftMenuContent(){
            this.setLayout(new BorderLayout());
            this.setPreferredSize(new Dimension(100,100));
            //this.setOpaque(false);
            JLabel testLabel = new JLabel("test");
            this.add(testLabel, BorderLayout.NORTH);
        }
        
    }

    So und nun zu dem Problem.
    So wie oben abgebildet funktioniert noch alles. Es wird ein Frame erzeugt. Das Frame
    enthällt ein JPanel (Farbe rot), welches das Frame ganz ausfüllt.
    In diesem Panel befindet sich links ein weiteres Panel. Dieses enthällt wiederum ein
    Panel (LeftMiddlePanel), welches einen Farbverlauf im Hintergrund hat.
    Dieser ist aber nicht sichtbar, weil LeftMenuContent nicht auf Durchsichtig steht.
    Wenn man in LeftMenuContent den Kommentar entfernt um den Farbverlauf sichtbar
    zu machen gehen die Probleme los. (Fällt sofort auf, einfach mal probieren)

    Wenn man in LeftPanel die zwei JLabels (lLeftTop, lLeftBottom) entfernt, ist alles wieder
    in Ordnung.

    Daraus werde ich einfach nicht schlau.
    Würde mich freuen, wenn mir Jemand sagen kann, woran das liegen könnte.

    Danke schonmal für Eure Bemühungen.

    Gruss Toby
     

  2. #2
    tecnique tecnique ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    Problem gelöst,

    In der Klasse LeftMiddlePanel in der Paint Methode einfach die erste Zeile rausnehmen.
    Das "super.paintComponents(g);" muss weg und dann ist die Welt in Ordnung.
     

Ähnliche Themen

  1. Problem beim drucken eines JPanels
    Von mergon im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 20.07.09, 11:24
  2. Problem mit JPanels
    Von sebbi1234 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 25.02.09, 07:59
  3. Problem bei der Darstellung
    Von bertiSR im Forum CSS
    Antworten: 1
    Letzter Beitrag: 23.10.08, 11:05
  4. Problem mit Darstellung im IE
    Von Peetz im Forum HTML & XHTML
    Antworten: 3
    Letzter Beitrag: 29.06.06, 12:35
  5. Problem mit Darstellung im IE
    Von djandy im Forum HTML & XHTML
    Antworten: 18
    Letzter Beitrag: 04.12.05, 18:19