Yrityksenä olisi lisätä Jframeen scrollpanella varustettu Jpanel, joka piirtää tiedostosta ladatun kuvan. Tämän lisäksi on painike jolla kuvaa voidaan vaihtaa.
Ongelma on kuvan vaihtamisen jälkeen tapahtuva alaspäin-scrollaus. Kun käyn alhaalla ja palaan takaisin ylös on kuva vaihtunut takaisin alkuperäiseen käynnistyksessä ladattuun kuvaan.
Lähdekoodi:
import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.awt.event.*; public class MainWindow extends JFrame implements ActionListener{ private String kuva_yksi_path = ".\\kuva1.png"; private String kuva_kaksi_path = ".\\kuva2.png"; ImagePanel drawingPanel = null; //The constructor for the class MainWindow. public MainWindow() { makeFrame(kuva_yksi_path); } //Make frame public void makeFrame(String kuvaPath) { drawingPanel = new ImagePanel(kuvaPath); JScrollPane scroller = new JScrollPane(drawingPanel); scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); this.setLayout(new BorderLayout()); this.setPreferredSize(new Dimension(900,670)); //change button JButton change_button = new JButton("change"); this.getContentPane().add(change_button, BorderLayout.WEST); change_button.addActionListener(this); //scroller is the JScrollPane this.getContentPane().add(scroller, BorderLayout.CENTER); this.setVisible(true); this.pack(); } //change the picture public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("change")) makeFrame(kuva_kaksi_path); } //The panel on which the drawings are done private class ImagePanel extends JPanel { Image image = null; public ImagePanel(String kuva_path) { image = getToolkit().getImage(kuva_path);//load image } //This is the method that actually paints all the drawings whenever a. //The shapes theselves can be defined somewhere else, but that paint method must be invoked from here. public void paintComponent(Graphics g) { super.paintComponent(g); //paint background Graphics2D g2 = (Graphics2D) g; if (image != null) { //there is a picture: draw it g.drawImage(image,0, 0, 53, 77, this); } //end if g.drawString("text", 750, 750);//To test the scrollpane. } public Dimension getPreferredSize() { return new Dimension(750,750); } } public static void main(String[] args) { new MainWindow(); } }
Voi johtua siitä että lisäät ikkunaan joka kerta kuvan vaihdon yhteydessä uudet JScrollPanet, ImagePanelit ja muut komponentit. Parempi tapa olisi vaihtaa vain ImagePanelin käyttämä kuva.
Aihe on jo aika vanha, joten et voi enää vastata siihen.