Repaint() inaczej

0

Czy jest jakaś możliwość by ten kawałek kodu wykonać prościej. Mam kilka jlabeli które się zmieniają i repaint nie dziala a to tak.

ramka.setSize(new Dimension(ramka.getSize().width+1,ramka.getSize().height+1));
ramka.setSize(new Dimension(ramka.getSize().width-1,ramka.this.getSize().height-1));
0

ramka.pack(); powinno chyba zadzialac.

0

wywołanie pack() może spowodować zmianę rozmiarów ramki, ale do rozmiarów preferowanych (preferredSize). Spróbuj raczej ramka.validate()

0

Miałem kilka labeli w boxie rzędami i w pewnym momencie kasowałem wszystkie i dodawałem nowe i tylko zmienienie myszka okna je odświeżało, validate jak i pack odrysowywało tylko nowe a te które zostały skasowane ale nie zostały nakryte nowymi to zostawały, ponadto pack zmieniało rozmiar okna.

Udało mi się znaleźć metodę która zadziałał. Jest to ramak.updateUI()

Jeszcze jedno pytanie. Dlaczego jLabel nie może mieć u mnie więcej niż 500 szerokości??

Dzięki za pomoc.

0

może jest to związane z layout managerem, który nie pozwala na większy rozmiar niż 500. Pokaż kod to się zobaczy.

A tak w ogóle to dziwi mnie, że validate nie odrysował poprawnie okna...

0

Sytuacja jest dość skomplikowana.
Ramka zawiera box pionowy
box pionowy zawiera 2 poziome
pierwszy poziomy zawiera label i tu moze byc wiecej niz 500
drugi zawiera panel ktory jest w tej powieszchi z suwakami

a panel wyglada tak

    class Panel extends JPanel
    {

        public Panel(File[] pliki,boolean b)
        {   
           this.setLayout(new FlowLayout(FlowLayout.LEFT));
           wypelnij(pliki,b);       

        }

        /**
         * Wypelnia panel etykietami plikow
         * @param pliki
         * @param b czy ma pokazywac ..
         */
        public void wypelnij(File[] pliki, boolean b)
        {

            if(pion!=null)
            this.remove(pion);

            pion = Box.createVerticalBox();
            lista = new ListOfMyLabel(pliki,b);

                for(int i=0; i<lista.size(); i++)
                {
                    Box poziom = Box.createHorizontalBox();

                    MyLabel x = lista.get(i);

                    poziom.add(x);
                    poziom.add(Box.createHorizontalGlue());

                    pion.add(poziom);
                }       

             pion.setPreferredSize(new Dimension(500,(int) pion.getPreferredSize().getHeight()));

             this.add(pion);
             this.updateUI();   
        }

        //-------------------------------
        //pola panelu

        private Box pion = null;
        private static final long serialVersionUID = 1L;
        private ListOfMyLabel lista = null;

    }//koniec panelu

ogólnie chodzi o to ze labele maja być w tym panelu jedna pod druga i maja być z lewej strony, no i dobrze by było zeby mogły by mieć więcej niż 500. Robię coś w stylu mojego komputera do przeglądania plików z dużą czcionka żebym mógł widzieć z łóżka i dodatkowo tak żeby się czegoś nauczyć. Moja pierwsza książke o javie skończyłem w weekend ostatni wiec kod może dziwnie wyglądać.
Pozdrawiam.

0

hmmm, a nie lepiej byłoby użyć listy (JList) ?
Poza tym masz fragment

pion.setPreferredSize(new Dimension(500,(int) pion.getPreferredSize().getHeight()))

On może ograniczać wielkość labelek do 500.

0

Kurde jaki ja jestem ślepy. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0