Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: skrollaus alas hävittää kuvan JPanelista

rattanat [15.11.2008 03:33:19]

#

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();
    	}
}

kayttaja-2499 [15.11.2008 08:28:42]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta