Swing-Probleme

Hervir

Grünschnabel
Hallo,

ich Entwickel zur Zeit ein Programm in dem es wichtig ist, dass verschiedene Klasse mit einander interagieren.
Mein Problem ist folgendes:

Ich habe zwei Klassen, in der einen ist eine JList mit verschiedenen Räumen, wenn ich einen selektiere soll der betreffende Raum in einer anderen Klasse entsprechend farbig markiert werden.
Die Räume zeichne ich mit Java2D (auf einem JComponent), es sollte also eigentlich nur die Farbe für den entsprechenden Raum auf z.B rot gesetzt werden und dann neu gezeichnet werden.

Leider bekomme ich es nicht hin, dass der Raumplan neu gezeichnet wird wenn sich die Farbe ändert, ich muss immer erst irgendetwas machen, wie zum Beispiel die Größe des Fensters ändern bevor etwas geschieht.

Bin da leider mit meinem Latein am Ende, ich hoffe ihr könnt mir helfen.

Hier mal ein Code ausschnitt:

Klasse mit der JList

Code:
    class ListListener implements ListSelectionListener {
      ListListener() {}

        public void valueChanged(ListSelectionEvent e) {
                    drawSelectedStationInfo(GuiController.getInstance().getStationByName(_jlStationList.getSelectedValue().toString()));
                    _selectedValue = _jlStationList.getSelectedValue().toString();
                    notifyAdvertisement(new ChangeStationEvent(this, _selectedValue));
                

                repaint();
        }

    synchronized void notifyAdvertisement( ChangeStationEvent event ){

        for(ChangeStationListener c : _listeners.getListeners( ChangeStationListener.class )){
            c.advertisement(event);
        }
    }
    }

Der Gebäudeplan, die Methode drawRoomOne(), wird in painComponent() aufgerufen.

Code:
    void drawRoomOne(){

        //Room 1

        g2d.setColor(Color.white);
        g2d.fillRect(30, 30, 150, 150);
        g2d.setColor(Color.black);
        g2d.drawString("1 OG", 35, 45);
        g2d.setColor(_colorRoom1);
        g2d.setStroke( new BasicStroke( 3 ) );
        g2d.drawRect(70, 70, 70, 50);

    }


    public void advertisement(ChangeStationEvent e) {

        _colorRoom1 = Color.red;
        repaint();
    }
 
Zuletzt bearbeitet:
Versuch mal mit validate()/revalidate() oder so statt repaint()

bzw auf was bezieht sich repaint jeweils?
 
Zuletzt bearbeitet:
Ich hatte auch schonmal ein Problem mit repaint, wo ich ein bestimmten Abschnitt nur neu zeichnen lassen wollte. Ich weiß bis heute nicht woran es lag, aber hab dann einfach das gesamte Fenster immer neuzeichnen lassen, dann gings. Ich weiß nicht, ob das irgendwie ein ähnliches Problem ist wie bei dir.
 
Ich hatte auch schonmal ein Problem mit repaint, wo ich ein bestimmten Abschnitt nur neu zeichnen lassen wollte. Ich weiß bis heute nicht woran es lag, aber hab dann einfach das gesamte Fenster immer neuzeichnen lassen, dann gings. Ich weiß nicht, ob das irgendwie ein ähnliches Problem ist wie bei dir.

Praise The Lord!!
Das war der entscheidende Hinweis, ich habe auch immer nur versucht, dass JComponent neu zu zeichnen.
Jetzt zeichne ich den gesamten JFrame neu, wo das Component mit drauf liegt. und siehe da es geht.

Vielen Dank :D
 
Zurück