Odświeżanie apletu

0

Witam,
problem wygląda w ten sposób że gdy utworze sobie button i po uruchomieniu go w aplecie ma wyświetlać zdjęcie. Niestety to zdjęcie bezpośrednio nie zostaje wyświetlone muszę zmienić rozmiar apletu, wtedy automatycznie odświeża się i pojawia zdjęcie. Za bardzo nie jest to funkcjonalne rozwiązanie dlatego prosiłbym was o pomoc jak temu za pobiec? Przy okazji czy można ograniczyć rozmiary apletu tak jak to jest we Frame?

0

Bez kodu, ale dojdziesz co i gdzie trzeba wpisać.

Jak naciśniesz przycisk to na koniec trzeba jeszcze wywołać repaint() dla frame.

0

w takim razie wrzucam to co udało mi sie wykombinować w programie. liczę że uzyskam jakieś wskazówki i pomoc od was.

import java.awt.*;
import java.util.*;
import java.applet.Applet;
import java.awt.Image;
import java.awt.event.*;
      
public class program extends Applet{
	Image pojazd1;
	Image pojazd2;
	Image ruch; 
	public void init(){
		// treść metody
        setLayout(null);
    		    /* rodzaj pojazdu */
    		    //stworzenie obiektu klasy Choice//
 		       Choice wybor= new Choice();
				wybor.add("osobowy");
				wybor.add("ciężarowy");
				wybor.add("autobus");
				wybor.reshape(515,300,100,80);
				wybor.addItemListener(
				  new ItemListener(){
            	 public void itemStateChanged(ItemEvent evt)
                 {	
                    Object source=evt.getSource();
                    Choice wybor=(Choice)source;
                    String p= wybor.getSelectedItem();
                    	if(p.equals("autobus")){
                    	 pojazd2= getImage(getCodeBase(),"grafika/solarisu_czarny.jpg");
                    
                    	}                  	
                    }
             }
             );
				/*dodanie interfejsu nasłuchujacego zdarzenie 
				 *tworzy klase pojazdy */
				add(wybor); 
		/* kolor pojazdów*/
		Choice kolor=new Choice();
		kolor.add("biały");
		kolor.add("czerwony");
		kolor.add("czarny");
		kolor.add("niebieski");
		add(kolor);
		kolor.reshape(515,360,100,80);
				/* wybor rodzaju krzyżówki */
				Choice krzyz= new Choice();
				krzyz.add("światła cykliczne");
				krzyz.add("pierszeństwo 1");
				krzyz.add("pierszeństwo 2");
				krzyz.add("pierszeństwo 3");
				krzyz.add("prawa wolna");
				krzyz.addItemListener(
				  new ItemListener(){
             public void itemStateChanged(ItemEvent evt)
                    {	
                    Object source=evt.getSource();
                    Choice krzyz=(Choice)source;
                    String k= krzyz.getSelectedItem();
                    	if(k.equals("światła cykliczne")){
                    	 ruch= getImage(getCodeBase(),"grafika/B232.jpg");                    
                    	}                  	
                    }
             }
             );
				add(krzyz);
				krzyz.reshape(515,60,120,100);
		/*wybor predkosci */
		Choice v=new Choice();
		v.add("40 km/h");
		v.add("50 km/h");
	    v.add("60 km/h");
		v.add("70 km/h");
		v.add("80 km/h");
		v.add("90 km/h");
		v.add("100 km/h");
		add(v);
		v.reshape(515,415,100,100);
				/*punkt startowy */
				Choice p= new Choice();
				p.add("położenie 1");
				p.add("położenie 2");
				p.add("położenie 3");
				p.add("położenie 4");
				add(p);
				p.reshape(515,470,100,100);
		/*dodaj pojazd */
		Button dodaj= new Button("dodaj pojazd");
		dodaj.addActionListener(new D());
		add(dodaj);
		dodaj.reshape(655,470,120,30);	
		}
	/* klasa obsługująca zdarzenie */
class D implements ActionListener {
	public void  actionPerformed(ActionEvent e){
				pojazd1= getImage(getCodeBase(),"grafika/kot.gif");
		}
	}
	public void paint (Graphics g){
		g.setColor(Color.black);
		g.drawLine(500,0,500,800);	/* linia oddzielająca program od opcji */
		g.drawLine(510,30,800,30);  /*ramka*/
		g.drawLine(510,30,510,230);
		g.drawLine(510,230,800,230);
		g.drawLine(800,30,800,230);
		Font czcionka= new Font("Courier", Font.BOLD, 12);
		g.setFont(czcionka);
		g.drawString("RUCH DROGOWY",515,20);
		g.drawString("wybierz rodzaj krzyzówki",515,50);	
	  	Color c=new Color(100,200,80);
	  	g.setColor(c);
		g.fillRect(0,0,499,800);
		g.setColor(Color.black);
	    g.drawString("POJAZDY",515,260);
	    g.drawString("wybierz pojazd",515,290);			
		g.drawLine(510,270,800,270);
		g.drawLine(510,270,510,550);
		g.drawLine(510,550,800,550);
		g.drawLine(800,270,800,550);
		g.drawString("kolor",515,345);
		g.drawString("prędkość",515,400);
		g.drawString("punkt startowy",515,455);	
	  /*wyswietlenie zdjecia*/	
	  int iwidth  = pojazd1.getWidth(this);
      int iheight = pojazd1.getHeight(this);
      g.drawImage(pojazd1,100,20,iwidth,iheight,this);
      //drugi obrazek
      int w  = pojazd2.getWidth(this);
      int h  = pojazd2.getHeight(this);
      g.drawImage(pojazd2,615,290,w,h,this);
      //trzeci obrazek
       int gk  = pojazd2.getWidth(this);
       int l  = pojazd2.getHeight(this);
      g.drawImage(ruch,615,50,gk,l,this);
    //  repaint(); tu miał byc repaint(); ?
	}
}
0
        public void  actionPerformed(ActionEvent e)
        {
                pojazd1= getImage(getCodeBase(),"grafika/kot.gif");
                // raczej tu
        }

Kod jest brzydko sformatowany, źle się go czyta

0

no pisze może swój drugi program w życiu wiec ekspertem nie jestem.. Czyli gdzie może tkwić bład w moim programie? Czy ktoś mógłby podzielić się wiedzą?

0
        public void  actionPerformed(ActionEvent e)
        {
                pojazd1= getImage(getCodeBase(),"grafika/kot.gif");
                // raczej tu powinien być repaint();
        }
0

faktycznie zdjęcie z "kotem" się otwiera automatycznie, natomiast przy wybraniu z listy elementu nie wyświetla mi. próbowałem tam zastosować metodę repaint() ale nie działa, poza tym wszystko się odbywa w takiej kolejności muszę najpierw wcisnąć button następnie wybrać z listy "solarisu_czarny" a następnie zdjęcie B232 jeżeli wybiorę inna kolejność zdjęcia się nie wyświetlą. (zaznaczam że B232 i solarisu_czarny) wyświetlają sie przy zmianie szerokości apletu? Jest jakieś rozwiązanie?

0

Sprubuj użyć revalidate(), a potem repaint, najczęściej działa w takich problemach.

0

no chyba na złość nie chce zadziałać. hmm nie wiem co tu poradzić..

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