class Rysunek extends JPanel {
JPanel j1 = new JPanel();
JComboBox jcb1 = new JComboBox();
Rysunek() {
im = Toolkit.getDefaultToolkit().getImage(nazwa1);
setLayout(null);
j1.setLayout(null);
add(j1);
j1.add(jcb1);
j1.setBounds(0, 0, 110, 110);
jcb1.setBounds(30, 40, 80, 20);
jcb1.addItem("Zdjecie 1");
jcb1.addItem("Zdjecie 2");
j1.setVisible(true);
jcb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object ob = jcb1.getSelectedItem();
if (ob == "Zdjecie 1") {
System.out.println("wybrano zdjecie1");
im = Toolkit.getDefaultToolkit().getImage(nazwa1);
repaint();
} else if (ob == "Zdjecie 2") {
System.out.println("wybrano zdjecie2");
im = Toolkit.getDefaultToolkit().getImage(nazwa2);
repaint();
}
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//im = Toolkit.getDefaultToolkit().getImage(nazwa1);
g.drawImage(im, 170, 40, this);
}
}
Błedy:
1.
im = Toolkit.getDefaultToolkit().getImage(nazwa1); <- to w meteodzie paintComponent czyniło że zawsze malowałeś obrazek z pod linku nazwa1.
2.
Metode paintComponent nadpisałeś w klasie Rysunek a nie panel więc wykonywałes repainta na j1 a nadpisałeś metode Rysunek.
chya że chciałes ten panel przemalowywać to wtedy:
Rysunek() {
im = Toolkit.getDefaultToolkit().getImage(nazwa1);
j1 = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(im, 170, 40, this);
}
};
setLayout(null);
j1.setLayout(null);
add(j1);
j1.add(jcb1);
j1.setBounds(0, 0, 210, 210);
jcb1.setBounds(30, 40, 80, 20);
jcb1.addItem("Zdjecie 1");
jcb1.addItem("Zdjecie 2");
j1.setVisible(true);
jcb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object ob = jcb1.getSelectedItem();
if (ob == "Zdjecie 1") {
System.out.println("wybrano zdjecie1");
im = Toolkit.getDefaultToolkit().getImage(nazwa1);
j1.repaint();
} else if (ob == "Zdjecie 2") {
System.out.println("wybrano zdjecie2");
im = Toolkit.getDefaultToolkit().getImage(nazwa2);
j1.repaint();
}
}
});
}
}
Tylkoi pamieteja że :
g.drawImage(im, 170, 40, this);// 0<170<220 &&0<40<220
j1.setBounds(0, 0, 210, 210);//jeśli ustawisz tu mniejszy zakres niz punkt od którego zacyznasz rysowac to nie bedizesz widizał tego.