Re: handling resize events with JScrollPane
 
RichT wrote:
Hi Knute,
Thanks for this, but do you know how to make image centred in the 
scrollpane?
thanks
Rich
One way is to position the JViewport.  Take the component dimensions, 
subtract the view port dimensions, divide by two and set the view port 
position to that value.  I've added a little code to do that to the 
example I gave you before but there is a hack here.  Because 
revalidate() sets in motion an event on the EDT that changes the size of 
the component, calling the code to center the view port right after that 
doesn't work.  The set gets done before the the view has been updated. 
So I wrapped the call to set the view port position in an 
EventQueue.invokeLater().  This schedules the view port setting after 
the other changes.  Depending on your actual program and what you are 
doing this might not be necessary.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class test extends JPanel {
     final BufferedImage image;
     int imageW,imageH;
     public test() throws IOException {
         image = ImageIO.read(new File("kittens.jpg"));
         imageW = image.getWidth();
         imageH = image.getHeight();
         setPreferredSize(new Dimension(imageW,imageH));
     }
     public void paintComponent(Graphics g) {
         int x = Math.max(getWidth() - imageW,0) / 2;
         int y = Math.max(getHeight() - imageH,0) / 2;
         g.drawImage(image,x,y,imageW,imageH,null);
     }
     public static void main(String[] args) {
         EventQueue.invokeLater(new Runnable() {
             public void run() {
                 try {
                     final test t = new test();
                     final JFrame f = new JFrame();
                     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                     final JScrollPane sp = new JScrollPane(t);
                     f.add(sp,BorderLayout.CENTER);
                     JMenuBar mb = new JMenuBar();
                     f.setJMenuBar(mb);
                     JMenu m = new JMenu("Scale");
                     mb.add(m);
                     final JMenuItem oneX = new JMenuItem("1X");
                     final JMenuItem twoX = new JMenuItem("2X");
                     oneX.setEnabled(false);
                     oneX.addActionListener(new ActionListener() {
                         public void actionPerformed(ActionEvent ae) {
                             oneX.setEnabled(false);
                             twoX.setEnabled(true);
                             t.imageW /= 2;
                             t.imageH /= 2;
                             t.setPreferredSize(
                              new Dimension(t.imageW,t.imageH));
                             t.revalidate();
                             f.repaint();
                         }
                     });
                     m.add(oneX);
                     twoX.addActionListener(new ActionListener() {
                         public void actionPerformed(ActionEvent ae) {
                             twoX.setEnabled(false);
                             oneX.setEnabled(true);
                             t.imageW *= 2;
                             t.imageH *=2;
                             t.setPreferredSize(
                              new Dimension(t.imageW,t.imageH));
                             t.revalidate();
                             f.repaint();
                             EventQueue.invokeLater(new Runnable() {
                                 public void run() {
                                     JViewport vp = sp.getViewport();
                                     Point p = new Point(
                                      (t.imageW - vp.getWidth())/2,
                                      (t.imageH - vp.getHeight())/2);
                                     vp.setViewPosition(p);
                                 }
                             });
                         }
                     });
                     m.add(twoX);
                     f.pack();
                     f.setVisible(true);
                 } catch (IOException ioe) {
                     ioe.printStackTrace();
                 }
             }
         });
     }
}
-- 
Knute Johnson
email s/nospam/linux/
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
      ------->>>>>>http://www.NewsDemon.com<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access