Swing drawLine() zeichnet über Fläche

darkwall

Aktives Mitglied
Hallo,
wünsche allen ein gutes neues Jahr 2025!

Ich habe ein Problem. Ich habe ein JPanel (unten pSP), in dass ich eine JScrollpane (unten mainSP) gesteckt habe in der wiederum ein JLayeredPane (myPanel) ist. Auf diesem lasse ich ein Gitter zeichnen (siehe Screenshot). Komischerweise werden die Linien beim Resizen des Fensters weiter gezeichnet (im Screenshot blau markiert). Wieso das?
Das JPanel (im Code unten das mainSP) habe ich mit dem Designer in Netbeans erzeugt.

Hier der Code, der die Panels etc. erstellt.
Java:
// MyPanel erbt von JPanel
myPanel = new MyPanel(anzahlSpalten, anzahlStunden, this);
// mainSP ist die JScrollpane
mainSP.add(myPanel);
mainSP.setViewportView(myPanel);
// pSP ist das Panel, in das alles rein kommt
pSP.add(mainSP, BorderLayout.CENTER);

Im Konstruktor der JLayeredPane (myPanel) steht dies:
Java:
public MyPanel(int anzahlSpalten, int anzahlStunden, GroupsFrameTest parent) {
        super();
        setLayout(new BorderLayout());
        this.anzahlZeilen = anzahlStunden * 12;
        this.anzahlSpalten = anzahlSpalten;
        setSize(anzahlSpalten * 9, (anzahlZeilen) * 10);
        setPreferredSize(new Dimension(anzahlSpalten * 9, (anzahlZeilen) * 10));
...
    }

Hier lasse ich im MyPanel die Linien zeichnen:
Java:
  @Override
    public void paintComponent(Graphics g2) {

        int yAbstand = PlanerDefaults.MINUTEN_ABSTAND_PIXEL;
        int spaltenBreite = PlanerDefaults.COLWIDTH;

        // senkrechte Striche zeichnen
        for (int col = 0; col < anzahlSpalten + 1; col++) {
            g2.drawLine(col * spaltenBreite, 0, col * spaltenBreite, getHeight());
        }

        // waagrechte Striche zeichnen
        for (int row = 0; row < anzahlZeilen + 1; row++) {
            if (row % 12 == 0) {
                g2.setColor(Color.black);
                g2.drawString(" " + row, 0, row * yAbstand);
            } else {
                g2.setColor(Color.lightGray);
            }

            g2.drawLine(0, row * yAbstand, getWidth(), row * yAbstand);
        }

        drawMarking(g2);

    }

Bin für jede Idee dankbar!
 

Anhänge

  • Linien.png
    Linien.png
    60,3 KB · Aufrufe: 0
Du malst die vertikalen Linien bis zu getHeight() runter, die waagerechten aber nur bis zu anzahlZeilen * yAbstand.
 

Zurück
Oben