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?
Bez kodu, ale dojdziesz co i gdzie trzeba wpisać.
Jak naciśniesz przycisk to na koniec trzeba jeszcze wywołać repaint() dla frame.
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(); ?
}
}
public void actionPerformed(ActionEvent e)
{
pojazd1= getImage(getCodeBase(),"grafika/kot.gif");
// raczej tu
}
Kod jest brzydko sformatowany, źle się go czyta
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ą?
public void actionPerformed(ActionEvent e)
{
pojazd1= getImage(getCodeBase(),"grafika/kot.gif");
// raczej tu powinien być repaint();
}
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?
Sprubuj użyć revalidate(), a potem repaint, najczęściej działa w takich problemach.
no chyba na złość nie chce zadziałać. hmm nie wiem co tu poradzić..