Repaint() inaczej

Repaint() inaczej
M4
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 14 lat
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.

Kopiuj
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));
CA
  • Rejestracja:około 17 lat
  • Ostatnio:około 14 lat
0

ramka.pack(); powinno chyba zadzialac.

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
0

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

M4
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 14 lat
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.

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
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...

M4
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 14 lat
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

Kopiuj
	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.

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
0

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

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

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

M4
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 14 lat
0

Kurde jaki ja jestem ślepy. Dzięki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.