Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Java Programmer > Re: handling re...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 2 of 5 Topic 52667 of 55513
Post > Topic >>

Re: handling resize events with JScrollPane

by Knute Johnson <nospam@[EMAIL PROTECTED] > May 12, 2008 at 02:34 PM

RichT wrote:
> Hi,
> 
> I am struggling to make the JScrollPane resize with its component
> 
> I have a JFrame with border layout, top toolbar, bottom a panel with 
> status information, and a JScrollPane in the centre, and the JSCrollPane

>  contains a JComponent.
> 
> I set a component resize listener to the JComponent but it seem to 
> resize the component in slow motion but still does not display the 
> scrollbars, the component in the centre is larger (I know this because 
> this has an image drawn on it)
> 
> imageComponent = extended JComponent.
> componentScrollPane = JSCrollPane.
> 
> this is the code I am using in the frame
> 
> imageComponent.addComponentListener(new ComponentListener() {
>                public void componentResized(ComponentEvent ce) {
>                
>                    componentScrollPane.setSize(new 
> Dimension(getImageComponent().getSize()));
>                    System.out.println("In Component resized");
>                   
>                }
> 
> As the image is resized so is the imageComponent, and I want the 
> imageComponent centred in the JScrollPane and scroll bars to appear to 
> view the rest of the image on the imageComponent.
> 
> When the Image is zoomed, the imageComponent should be resized to fit 
> the new size of the zoomedImage, I am calling this manually and I am 
> sizing the imageComponent then calculating the size of the image and 
> drawing to the imageComponent, the component seems to work in slow 
> motion, growing and then shrinking in a word weird!!
> 
> Any help really appreciated
> Rich

So control your component by using its preferred size and drawing it to 
scale.  See the example below.  When you select 2X the component is 
doubled in size and the image is drawn to fit.  The JScrollPane adjusts 
as necessary to hold the component.  If you drag the window bigger the 
component will be made larger by the BorderLayout manager and the 
drawing will be centered (see the paintComponent()).

im****t java.awt.*;
im****t java.awt.event.*;
im****t java.awt.image.*;
im****t java.io.*;
im****t javax.imageio.*;
im****t 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();
                         }
                     });
                     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.NewsDem
 




 5 Posts in Topic:
handling resize events with JScrollPane
RichT <someone@[EMAIL   2008-05-12 20:09:55 
Re: handling resize events with JScrollPane
Knute Johnson <nospam@  2008-05-12 14:34:58 
Re: handling resize events with JScrollPane
RichT <someone@[EMAIL   2008-05-13 21:16:05 
Re: handling resize events with JScrollPane
Knute Johnson <nospam@  2008-05-13 16:56:29 
Re: handling resize events with JScrollPane
RichT <someone@[EMAIL   2008-05-15 00:32:49 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Dec 3 19:27:58 CST 2008.