ScrollPane fill width and preferred size

I suspect this is going to end up as a feature request, but does anyone know if there is an existing way to have a ScrollPane stretch its content if the available space is greater than the preferred size of the content, but also not shrink the content if the scrollpane is smaller than the preferred size of the content?
If we have this simple example:
public void start(Stage stage) throws Exception
    BorderPane contentPane = new BorderPane();
    contentPane.setPrefSize(400, 300);
    contentPane.setStyle("-fx-background-color: blue");
    ScrollPane scrollPane = new ScrollPane();
    scrollPane.setContent(contentPane);
    Scene scene = new Scene(scrollPane, 800, 600);
    stage.setScene(scene);
    stage.show();
} When the window is big, our content pane is left at its preferred size with white space around it and no scroll bars showing. When the window is small our contentPane is still at its preferred size with scrollbars on it and no white space. Much as we'd expect.
If we add this line of code:
scrollPane.setFitToWidth(true);Then when the window is big then our contentPane is stretched nicely to fill the available space. When the window is small, the scroll bars don't kick-in (effectively scrolling is turned off) and the contentPane is shrunk to fit the available space.
What I'd rather have is when the window is small we get scrolling, when the window is big, we get stretching. Possible?
Cheers,
zonski

It is actually possible to do this in markup as well. For example, the following markup creates an observable array list and attaches a controller-based change event handler to it:
<FXCollections fx:factory="observableArrayList" onChange="#handleListChangeEvent"/> The controller method should look something like this:
@FXML
protected void handleListChangeEvent(ObservableListChangeEvent<?> event) {
    // Handle the change event
}[edit] Note that ObservableListChangeEvent is currently a private class - please feel free to submit a feature request to make this class public if you would like.

Similar Messages

  • Use of minimum, maximum and preferred size?

    Hi,
    What is the use of the three sizes (maximum size, minimun size and preferred size) of component and container?
    And which class use them?
    Thanks for any ideas and input,
    Wing

    I read somewhere on this forum that most layout managers pretty much ignore these properties... just one of them would properly use it (don't know which one, I think it was one of the 'less-common' ones like Card or BoxLayout).
    If somebody has more info I would wanna read it too!

  • JCombox custom size (reduced width) and popup size default (full width)

    Hi there ppl,
    Could somebody help me out of this pot hole? I have a JComboBox that has a reduced width:
    combo.setPreferredSize(new Dimension(100,25);
    but I want the popup to have a default size so it shows the full width of all the combo items.
    Thanks.

    Check out these [url http://www.senun.com/Left/Programming/Java_old/Examples_swing/SwingExamples.html]ComboBox Examples.

  • In InDesign, how does one determine the pixel size of a text box? Specifically, we need to write text to specifications of 600 pixel width, and have no idea a) how to scale a text box to specific pixel width, b) how to

    This may be a basic question... but in InDesign, how does one determine the pixel size of a text box? Specifically, we need to write text to specifications of 600 pixel width, and have no idea a) how to scale a text box to specific pixel width, b) how to determine what word count we can fit in, and c) how to do it in a table? Thanks!

    Set your ruler increments to pixels Preferences>Units & Increments. You can fill the text box with placeholder text Type>Fill with Placeholder text and get a word count from the Info panel with Show Options turned on from the flyout.
    From the Transform panel you can set a text box's width and height

  • Sizing a scrollPane to fit its contents' width and height

    Hi,
    I have a MC loaded into a ScrollPane and have attempted to
    detect the MC's width and height and use that to set the size of
    the scrollPane per the documentation at
    Adobe
    Live Docs. I am probably not adapting the code correctly (well,
    duh), but what I have isn't working and I don't know why. Does
    anyone around here have a clue? Thanks in advance.

    OK, the forum ate my code :(
    Not sure how to get it to display. Feel free to close the topic as it doesn't make sense. I'll ask elsewhere.
    Thanks,
    Aral

  • When i open a new document, my "width" and "lenght" add two zeros automatically to file size??? For example basic A4 size in mm is 210 00mm x 297 00mm? And i can´t do nothing about it! Why on earth?

    When i open a new document, my "width" and "lenght" add two zeros automatically to file size??? For example basic A4 size in mm is 210 00mm x 297 00mm? And i can´t do nothing about it! Why on earth?
    This "error note" must have something to do about it?

    elppaelo,
    You may try the list.
    The following is a general list of things you may try when the issue is not in a specific file (you may have tried/done some of them already); 1) and 2) are the easy ones for temporary strangenesses, and 3) and 4) are specifically aimed at possibly corrupt preferences); 5) is a list in itself, and 6) is the last resort.
    If possible/applicable, you should save curent artwork first, of course.
    1) Close down Illy and open again;
    2) Restart the computer (you may do that up to 3 times);
    3) Close down Illy and press Ctrl+Alt+Shift/Cmd+Option+Shift during startup (easy but irreversible);
    4) Move the folder (follow the link with that name) with Illy closed (more tedious but also more thorough and reversible);
    5) Look through and try out the relevant among the Other options (follow the link with that name, Item 7) is a list of usual suspects among other applications that may disturb and confuse Illy, Item 15) applies to CC, CS6, and maybe CS5);
    Even more seriously, you may:
    6) Uninstall, run the Cleaner Tool (if you have CS3/CS4/CS5/CS6/CC), and reinstall.
    http://www.adobe.com/support/contact/cscleanertool.html

  • [svn:fx-trunk] 12007: When the Internet Explorer browser window is obscured Stage. width and Stage.height never return the proper sizes until/ unless the IE window is unobscured long enough for the player to feel it needs to render initially .

    Revision: 12007
    Revision: 12007
    Author:   [email protected]
    Date:     2009-11-19 12:45:27 -0800 (Thu, 19 Nov 2009)
    Log Message:
    When the Internet Explorer browser window is obscured Stage.width and Stage.height never return the proper sizes until/unless the IE window is unobscured long enough for the player to feel it needs to render initially.  This was preventing our preloader from completing, since we were waiting for a non-0 Stage size.  Took a slightly different approach to solving the bug for which the original logic was added to work around.
    QE notes: None
    Doc notes: None
    Bugs: SDK-24191
    Reviewer: Alex, Evtim
    Tests run: Checkin
    Is noteworthy for integration: No
    Ticket Links:
        http://bugs.adobe.com/jira/browse/non-0
        http://bugs.adobe.com/jira/browse/SDK-24191
    Modified Paths:
        flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as
        flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/Preloader.as

    Revision: 12007
    Revision: 12007
    Author:   [email protected]
    Date:     2009-11-19 12:45:27 -0800 (Thu, 19 Nov 2009)
    Log Message:
    When the Internet Explorer browser window is obscured Stage.width and Stage.height never return the proper sizes until/unless the IE window is unobscured long enough for the player to feel it needs to render initially.  This was preventing our preloader from completing, since we were waiting for a non-0 Stage size.  Took a slightly different approach to solving the bug for which the original logic was added to work around.
    QE notes: None
    Doc notes: None
    Bugs: SDK-24191
    Reviewer: Alex, Evtim
    Tests run: Checkin
    Is noteworthy for integration: No
    Ticket Links:
        http://bugs.adobe.com/jira/browse/non-0
        http://bugs.adobe.com/jira/browse/SDK-24191
    Modified Paths:
        flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as
        flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/Preloader.as

  • How does JEditorPane determine its preferred size?

    Could someone explain how JEditorPane determines the initial preferred
    size? Its default sizing is not giving me what I need and I'm not sure
    how to control it, other than explicitly setting the size with
    setPreferredSize().
    A simple example:
            String s = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 10 20" +
                       "21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39";
            JEditorPane ed = new JEditorPane("text",s);
            JPanel pan = new JPanel();
            pan.setLayout(new BoxLayout(pan,BoxLayout.Y_AXIS));
            pan.add(ed);
            JFrame f = new JFrame();
            f.getContentPane().add(pan);
            f.pack();
            f.setVisible(true);This code generates a window that shows one line, with "1 2 3 4 5 6 7 8 9"
    showing. I'd like to have a larger area showing initially.
    Does the choice of layout manager effect this? (I actually prefer to use
    TableLayout; the above example with a 1x1 TableLayout and widths set to
    PREFERRED yields exactly the same results.)
    Thanks,
    bw

    Set your ruler increments to pixels Preferences>Units & Increments. You can fill the text box with placeholder text Type>Fill with Placeholder text and get a word count from the Info panel with Show Options turned on from the flyout.
    From the Transform panel you can set a text box's width and height

  • Setting a fixed width and a changing height for a component within a panel

    Alright guys here's my next question. I'm now having trouble trying to figure out how to only resize the height of a JTabbedPane yet keep the width fixed. In other words, as the JPanel its in changes in size, I'd like to have the width of my tabbed pane stay a certain value yet let the height of it adjust to the panel's height as it changes. Is there a way to somehow extract the panel's height into a int or something and then when using the setPreferredSize() function simply implement this retrieved value into the function's height parameter? I've tried messing around with Dimensions and getHeight() functions and the sort but to no success. For instance, within the constructor of one of my JFrames using System.out.println(this.getHeight()); prints 0, when of course this is not the case in reality for the frame's height. The panel's changing size is due to the user resizing the window its in. In one of my previous threads in this forum I learned how to use a GridLayout (it was 2 rows and 1 column in size) to keep the height of the top area in a BorderLayout fixed, yet as the user resized the window, the layout would stretch the area width-wise accordingly. However, that was because I had 2 cells in the layout to control, and I know this wouldn't work with only 1. Any ideas?

    You still apparently haven't read the tutorial on using Layout Managers to understand the capabilites of each Layout Manager.
    For instance, within the constructor of one of my JFrames using
    System.out.println(this.getHeight()); prints 0, when of course this is not the case in reality for the frame's heightComponents don't have a size until the GUI is visible on the screen. That is until you've done a pack(), or a setVisible( true ). You should never be using setSize().
    Layout Managers use setPreferredSize() ,setMinimumSize() and setMaximumSize() as suggestions for determining the layout. Although most layout managers don't use all the suggestions, which is why you need to read the tutorial to find out how the layout managers work.
    I'm now having trouble trying to figure out how to only resize the height
    of a JTabbedPane yet keep the width fixedWell, I don't understand the requirement. The preferred size of a tabbed pane is equal to the preferred size of the largest tab added to the tabbed pane. So I don't understand the concept of artificially changing the vertical height.
    Anyway reread the tutorial on "How to Use the Border Layout". Two of the 5 areas respect the width of the component but alter the height to fill all the available space.
    If you need further help then you need to create a [url http://homepage1.nifty.com/algafield/sscce.html]Short, Self Contained, Compilable and Executable, Example Program that demonstrates the incorrect behaviour, because I can't guess exactly what you are doing based on the information provided.
    And don't forget to use the [url http://forum.java.sun.com/help.jspa?sec=formatting]Code Formatting Tags so the code retains its original formatting.

  • Preferred size of JEditorPane/ HTML page

    Hi,
    I've loaded an HTML page in a JEditorPane. Since I'm using a layout manager with absolute positioning, I need to know the pane's preferred size.But the preferred size I get is just about (6, 6), although it has a big picture in it. I tried validate() first or to add it with (1,1) to have it set up properly (visible etc.) and then resize it afterwards, but it had no effect. Is there a way to get a preferred size of an HTML page?
    Thanks a lot.
    Greets
    Puce
    Note: Using another layout manager is not a option, since this is a very specialized task.

    I could use this as well. I'm tiling JEditorPanes vertically inside a JPanel using BoxLayout. The problem is that I need to limit the width of the panel, so I need to adjust the sizes accordingly. Any suggestions? I'll give another duke...
    Max

  • Determine preferred size to be set for the JPanel attached to JScrollBar

    Determine what preferred size to be set for the JPanel attached to JScrollBar.
    Hello all, I am having a JPanel, where new components will be added into it during run-time. When there are too many components inside the JPanel, I need to re-set the JPanel preferred size so that the JScrollBar is scrollable.
    I was wondering what is the good method to determine the preferred size of JPanel during runtime?
    Currently, I am using
    myJPanel.setPreferredSize(new Dimension(
    numberOfNewComponent * preferred width of each component,
    numberOfNewComponent * preferred height of each component
    ));Is there any better alternative?
    Thank you very much.
    yccheok

    Usually a container such as JPanel will calculate its own preferred size from its layout manager - calling setPreferredSize is often unnecessary.
    When you add a component to your JPanel its preferred size will change automatically.
    What's wrong with the behaviour when you simply add your JPanel to a JScrollPane and let it manage its own preferred size?
    Hope this helps.

  • Nested canvas in GridLayout can't get its width and height

    Hello,
    I have a class entitled DisplayCanvas, which will accept some parameters from an invocation in another class including a shape and message parameters. These parameters must be centered in the instance of DisplayCanvas.
    For some reason, when I use this.getWidth() and this.getHeight() within my DisplayCanvas class, I get 0 and 0! I need the width and height in order to center the parameters the user will enter.
    Why does the width and height result at 0? What can I do to get the width and height?
    In my DisplayCanvas class notice the lines:
    canWidth = this.getWidth();
    canHeight = this.getHeight();
    For some reason the result is 0 for each!
    Here is my code for the DisplayCanvas class:
    //import the necessary clases
    import java.awt.*;
    import java.applet.*;
    import javax.swing.*;
    //begin the DisplayCanvas
    public class DisplayCanvas extends Canvas
      //declare private data members to house the width and height of the canvas
      private int canWidth;
      private int canHeight;
      //declare private data members for the shape and message
      private String message;
      private String shape;
      private Color sColor;
      private int sWidth;
      private int sHeight;
      private String font;
      private Color ftColor;
      private int ftSize;
      //declare public data members
      //constructor of DisplayCanvas
      public DisplayCanvas()
         //set the width and height
         canWidth = this.getWidth();
         canHeight = this.getHeight();
         //set all data members to defaults
         message = "";
         shape = "";
         sColor = null;
         sWidth = 0;
         sHeight = 0;
         font = "";
         ftColor = null;
         ftSize = 0;
      } //end the constructor
      //begin the setParams function
      public void setParams(String m, String s, Color c, int w, int h,
                            String f, Color ftC, int ftS)
          //set all private data members of DisplayShape to the arguments
          //this function assumes error checking was done by DemoShape
          message = m;
          shape = s;
          sColor = c;
          sWidth = w;
          sHeight = h;
          font = f;
          ftColor = ftC;
          ftSize = ftS;
      } //end the setParams function
      //begin the public paint function of ShowShape
      public void paint(Graphics g)
          //set and output the shape according to the arguments
          //determine the x and y of the shape
          int x = (canWidth - sWidth) / 2;
          int y = (canHeight - sHeight) / 2;
          //set the color for the graphic object
          g.setColor(sColor);
          //output the shape
          g.drawRect(x, y, sWidth, sHeight);
          //set and output the message according to the arguments
          //set the color and the font for the graphic object
          g.setColor(ftColor);
          g.setFont(new Font(font, Font.PLAIN, ftSize));
          //determine the centering of the message
          //output the message with the settings
          g.drawString(canWidth + " " + canHeight, 10, 10);
      } //end the paint function of ShowShape class
    } //end the DisplayCanvas classHere is my form entry class using the nested DisplayCanvas instance entitled drawCanvas:
    //import the necessary java packages
    import java.awt.*;                  //for the awt widgets
    import javax.swing.*;               //for the swing widgets
    import java.awt.event.*;            //for the event handler interfaces
    //no import is needed for the DisplayCanvas class
    //if in the same directory as the DemoShape class
    public class DemoShape extends JApplet
        //declare private data members of the DemoShape class
        //declare the entry and display panel containers
        private Container entire;           //houses entryPanel and displayCanvas
        private JPanel entryPanel;          //accepts the user entries into widgets
        private DisplayCanvas drawCanvas;   //displays the response of entries
        //required control buttons for the entryPanel
        private JTextField xShapeText, yShapeText, messageText, fontSizeText;
        private ButtonGroup shapeRadio;
        private JRadioButton rect, oval, roundRect;
        private JComboBox shapeColorDrop, fontTypeDrop, fontColorDrop;
        //declare public data members of the DemoShape class
        //init method to initialize the applet objects
        public void init()
            //arrays of string to be used later in combo boxes
            //some are used more than once
            String fonts[] = {"Dialog", "Dialog Input", "Monospaced",
                                "Serif", "Sans Serif"};
            String shapes[] = {"Rectangle", "Round Rectangle", "Oval"};   
            String colors[] = {"Black", "Blue", "Cyan", "Dark Gray",
                                "Gray", "Green", "Light Gray", "Magenta", "Orange",
                                "Pink", "Red", "White", "Yellow"};
            //declare variables to assist with the layout
            //these are the left and right justified x coordinates
            int ljX = 10; int rjX = 150;
            //this is the y coordinates for the rows
            int yRow1 = 10;     //the shape rows
            int yRow2 = 40;
            int yRow3 = 60;
            int yRow4 = 130;
            int yRow5 = 150;
            int yRow6 = 210;    //the message rows
            int yRow7 = 240;
            int yRow8 = 260;
            int yRow9 = 300;
            int yRow10 = 320;
            int yRow11 = 360;
            int yRow12 = 380;
            //these are the widths for the text boxes, drop downs
            //message entry,  big message entry and radio buttons
            int tWidth = 30; int dWidth = 100;
            int mWidth = 250; int bmWidth = 250;
            int rWidth = 125;
            //the height is universal, even for the messages!
            int height = 25;
            //set a content pane for the entire applet
            //set the size of the entire window and show the entire applet
            entire = this.getContentPane();
            entire.setLayout(new GridLayout(1, 2));
            //create the entry panel and add it to the entire pane
            entryPanel = new JPanel();
            entryPanel.setLayout(null);
            entire.add(entryPanel);
            //create the display canvas and add it to the entire pane
            //this will display the output
            drawCanvas = new DisplayCanvas();
            entire.add(drawCanvas);       
            //entry panel code
            //add the form elements in the form of rows
            //the first row (label)
            JLabel entryLabel = new JLabel("Enter Shape Parameters:");
            entryPanel.add(entryLabel);
            entryLabel.setBounds(ljX, yRow1, bmWidth, height);
            //second row (labels)
            JLabel shapeTypeLabel = new JLabel("Select Shape:");
            shapeTypeLabel.setBounds(ljX, yRow2, mWidth, height);
            entryPanel.add(shapeTypeLabel);
            JLabel shapeColorLabel = new JLabel("Select Shape Color:");
            shapeColorLabel.setBounds(rjX, yRow2, mWidth, height);
            entryPanel.add(shapeColorLabel);
            //third row (entry)        
            rect = new JRadioButton("Rectangle", true);
            oval = new JRadioButton("Oval", false);
            roundRect = new JRadioButton("Round Rectangle", false);
            rect.setBounds(ljX, yRow3, rWidth, height);
            oval.setBounds(ljX, yRow3 + 20, rWidth, height);
            roundRect.setBounds(ljX, yRow3 + 40, rWidth, height);
            shapeRadio = new ButtonGroup();
            shapeRadio.add(rect);
            shapeRadio.add(oval);
            shapeRadio.add(roundRect);
            entryPanel.add(rect);
            entryPanel.add(oval);
            entryPanel.add(roundRect);       
            shapeColorDrop = new JComboBox(colors);
            shapeColorDrop.setBounds(rjX, yRow3, dWidth, height);
            shapeColorDrop.addFocusListener(new focusListen());
            entryPanel.add(shapeColorDrop);
            //the fourth row (labels)
            JLabel xShapeLabel = new JLabel("Enter Width:");
            xShapeLabel.setBounds(ljX, yRow4, mWidth, height);
            entryPanel.add(xShapeLabel);
            JLabel yShapeLabel = new JLabel("Enter Height:");
            yShapeLabel.setBounds(rjX, yRow4, mWidth, height);
            entryPanel.add(yShapeLabel);
            //the fifth row (entry)
            xShapeText = new JTextField("200", 3);
            xShapeText.setBounds(ljX, yRow5, tWidth, height);
            xShapeText.addFocusListener(new focusListen());
            entryPanel.add(xShapeText);        
            yShapeText = new JTextField("200", 3);
            yShapeText.setBounds(rjX, yRow5, tWidth, height);
            yShapeText.addFocusListener(new focusListen());
            entryPanel.add(yShapeText);
            //the sixth row (label)
            JLabel messageLabel = new JLabel("Enter Message Parameters:");
            messageLabel.setBounds(ljX, yRow6, bmWidth, height);
            entryPanel.add(messageLabel);
            //the seventh row (labels)   
            JLabel messageEntryLabel= new JLabel("Enter Message:");
            messageEntryLabel.setBounds(ljX, yRow7, mWidth, height);
            entryPanel.add(messageEntryLabel);
            //the eighth row (entry)
            messageText = new JTextField("Enter your message here.");
            messageText.setBounds(ljX, yRow8, mWidth, height);
            messageText.addFocusListener(new focusListen());
            entryPanel.add(messageText);
            //the ninth row (label)
            JLabel fontTypeLabel = new JLabel("Select Font:");
            fontTypeLabel.setBounds(ljX, yRow9, mWidth, height);
            entryPanel.add(fontTypeLabel);
            JLabel fontColorLabel = new JLabel("Select Font Color:");
            fontColorLabel.setBounds(rjX, yRow9, mWidth, height);
            entryPanel.add(fontColorLabel);
            //the tenth row (entry)
            fontTypeDrop = new JComboBox(fonts);
            fontTypeDrop.setBounds(ljX, yRow10, dWidth, height);
            fontTypeDrop.addFocusListener(new focusListen());
            entryPanel.add(fontTypeDrop);       
            fontColorDrop = new JComboBox(colors);
            fontColorDrop.setBounds(rjX, yRow10, dWidth, height);
            fontColorDrop.addFocusListener(new focusListen());
            entryPanel.add(fontColorDrop);
            //the eleventh row (label)
            JLabel fontSizeLabel = new JLabel("Select Font Size:");
            fontSizeLabel.setBounds(ljX, yRow11, mWidth, height);
            entryPanel.add(fontSizeLabel);
            //the final row (entry)
            fontSizeText = new JTextField("12", 2);
            fontSizeText.setBounds(ljX, yRow12, tWidth, height);
            fontSizeText.addFocusListener(new focusListen());
            entryPanel.add(fontSizeText);
            //display panel code
            //use test parameters
            //these will later be retrieved from the entries
            drawCanvas.setParams("Hello", "roundRect", Color.red,
                                100, 100, "Serif", Color.black, 12);
            //set the applet to visible
            //set to visible and display
            entire.setSize(800, 600);
            entire.setVisible(true);
        }   //end the init method
        //declare an inner class to handle events
        private class focusListen implements FocusListener
            //supply the implementation of the actionPerformed method
            //pass an event variable as the argument
            public void focusLost(FocusEvent e)
            { JOptionPane.showMessageDialog(null, "Focus lost."); } 
            //declare an empty focus gained function
            public void focusGained(FocusEvent e) {}      
        }   //end testListen class
    }   //end DemoShape class

    Sorry for glossing over your code sample, particularly as it looks like one of the best I've seen so far on the forums, but I'm pretty sure the answer you are looking for is as follows:
    Java doesn't render a component until paint() is called so until then you are not going to have any size settings because the jvm simply doesn't know how big the visual component is. This makes sense when you think about what the jvm is doing. The layout manager controls the display of the components depending on the settings it is supplied. So until it knows how many components you want, where, what kind of spacing, etc, etc, etc, how can the size be determined.
    The true cycle of events is therefore:
    create an instance of DisplayCanvas,
    add it to your container,
    make the container visible (which renders the component),
    get the size of the DisplayCanvas instance.
    You are being hampered because your desired chain of events is:
    create an instance of DisplayCanvas,
    get the size of the DisplayCanvas instance,
    add it to your container,
    make the container visible.
    This state of affairs is highly annoying and then leads to the next question "what do we do about that?". There is a cunning trick which is to get the jvm to render the component to an off-screen image, thus calculating the dimensions of the component so that you can do precisely the kind of enquiry on the object that you have been looking for. It should be noted that this may not be the visual size for all the reasons given above, but it is the "preferred size" for the component. Check the Swing tutorials and have a look at the section on Layout Managers for a run down on what that means.
    Anyway, we can use this handy code sample to determine the preferred size for your component. Notice the call to "paint()" (normally you would never make a direct call to paint() in swing) and the "g.dispose()" to free resources:
    package com.coda.swing.desktool.gui;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    public class PaintUtil
         public PaintUtil()
              super();
         public static Component paintBuffer(Component comp)
              Dimension size = comp.getPreferredSize();
              comp.setSize(size);
              BufferedImage img = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
              Graphics2D g2 = img.createGraphics();
              comp.paint(g2);
              g2.dispose();
              return comp;
    }Before you make a call to getWidth() or getHeight() put in a call to "PaintUtil.paintBuffer(this);" and see what happens.
    By the way, I can't claim credit for this code ... and I really wish I could remember where I got it from myself so I can thank them :)

  • Update JScrollBar Extent when JScrollPane Component Changes Preferred Size

    Hi folks,
    I have an interesting, but concise problem that I've been working on for a few days but haven't had any luck.
    In Java 1.5 or Java6, I have a JScrollPane which contains a JPanel. The settings of the scrollbar (for example, the Extent [the width of the "thumb" or "slider" on the scrollbar]) are determined based on the dimension of the underlying contained component, in particular, the Preferred Size.
    My problem is this. The underlying component has a "zoom" capability, such that the actual size of the component can and does change (i.e., zooming out reduces its preferred size).
    Happily, the consequence of this design is that the "size" or extent of the scrollbar sliders/thumbs adjusts to give visual indication of the proportion of the current view (ViewPort View dimension) to the underlying component's dimension.
    The problem is, the scrollbar sliders do NOT automatically update their size in response to programatically changing the JScrollPane's contained component's PreferredSize. They WILL be updated if I RESIZE the parent JFrame manually.
    But for the life of me, I can't get those sliders to update programatically. I've tried repaint(), update, validate(), etc. on the JScrollPane but no luck.
    I've done a debug to get into the stack trace of the Sun code during run time, and there's a lot going on... there's a doLayout(), a reshape() (deprecated), firing various property changes, but I just can't seem to find a good hook into getting the scrollbar to update its internal Bounds model and repaint accordingly. Calling setBounds() on the JScrollPane I think would trigger it, however, looking at the code.. it seems to ignore firing property events and repainting of the bounds themselves didn't actually change (i.e. no action happens if the current dimension and specified dimension in the argument to setBounds() are the same).
    Any ideas here on how to this to get those sliders to update programatically with a new value for the extent?
    Thanks,
    --Mike                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

    Understood! It was my intention to give credit and now I'm happy to do so! I've now assigned the Duke Points. Minor usability issue, it was not obvious how to do this the first time (and I did poke around a little before I gave up earlier in the day, reverting to just assigning him the correct question). I've got it now though! Thanks again--definitely knocked out an issue I was having today and allowed me to move on to add'l development work today.
    All the best!
    --Mike                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • Title and JFrame size

    hello,
    My problem is the next one :
    -when I use the pack() method on my JFrame it doesn't use the title bar size...so the title is often cut.
    -when I use the frame.setSize() method, the size of the frame is dependant of the system and the computer...
    How can i solve my problem ?
    thanks,
    fleur.

    Hi Zharapic,
    Set the preferred size of the JFrames width based on the length of the title string.
    Something like this.
    //the minimum width of the frame without a title.
    int MINIMUM_SIZE = 100;
    FontMetrics metrics = jframe.getFontMetrics(jframe.getFont());
    int titleOffset = metrics.stringWidth(jframe.getTitle());
    //you now have the length of the title so you can set the
    //preferred size of the JFrame.
    jframe.setPreferredSize(jframe.getHeight(), MINIMUM_SIZE+titleOffset);This way the JFrame should always fit the title when you call pack.
    hope this helps.
    N35Sy

  • Setting canvas width and height objectdraw

    I would like to kno how to set the window height and width so users cannot resize it. I would like the methods to be out of the library objectdraw
    Thanks

    motherboarddude wrote:
    [http://eventfuljava.cs.williams.edu/library/objectdrawJavadocV1.1.2/index.html] no clue
    What does 'no clue' mean? That you have no clue if it is J2SE? The answer is no, it is not J2SE (or even a Sun standard extension like JavaHelp or JOGL). We know nothing about that API and can provide no help with it.
    (And in future, try to make your replies specific enough that people do not have to 'guess' what you mean. That becomes irritating, very quickly.)
    OTOH a brief perusal of the JavaDocs suggests the API has no component that extends Frame or JFrame, so the answer to your request that it use one of the methods of your custom library is "No, it provides no functionality to restrict the size of the frame the user is offered - since that frame will come from the J2SE".
    Of course, if you simply wanted to ensure the drawing canvas is never resized, simply add it as a 'no args' element in a GridBagLayout with no other GUI components in it. If the GBL is used as described, the component will be centered within it. Add a JScrollPane to the component in case the user shrinks the frame smaller than the preferred size of the drawing area. In Java 1.6+, call setMinimumSize() after packing, and you can afford to lose the scroll pane.

Maybe you are looking for

  • RFQ Conditions automatically gets copied in new document

    Hello All, I have an issue. I maintain net price and discount condition in RFQ for service and save it. Whenever I maintain price for new service RFQ the discount conditions maintained in the previous RFQ gets automatically copied, which is undesirab

  • Hrms implementation

    Hi, i want to learn about hrms module implementation in oracle ebs 11.5.10.2.i came to know that patching in differennt during hrms module implementation in oracle ebusiness suite.How does it differ from normal patching.please provide me the steps. A

  • XI and BAPI - simple scenario

    Hi, I'm just a beginner with XI. I've got such scenario to develop. Could anyone help me ? 1. After completing production in external system I'm receving LOIPRO.LOIPRO01 message from R/3 system with status I0045. (I mean LOIPRO with status I0045 is b

  • Deploying xml file alone in sun application server 8.1

    Hi all, I am having an xml file which should be pasted or put in sun systemapplication server 8.1. so that i could make access of the xml file alone.... i tried it..but i couldn't deploy a xml file alone...it needs any war file or ear file to be depl

  • Volume check failed

    I had to boot from the install disc today, and in trying to verify the disk I get this message: Invalid node structure, Volume check failed, Error: Filesystem verify or repair failed.  What should I do? The reason I'm trying to boot from the disc is