Results 1 to 13 of 13
Like Tree1Likes
  • 1 Post By KevinWorkman

Thread: Redrawing the ArrowButton of JComboBox in Nimbus LaF

  1. #1
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    Northern Virginia, United States
    Posts
    3,807
    Rep Power
    5

    Default Redrawing the ArrowButton of JComboBox in Nimbus LaF

    I have moved this to its own thread because I was concerned that I might have hijacked the other OPs thread. As I stated earlier, I decided to try changing the arrowHead on a JComboBox since it should be easy. I created a polygon so I could fill in the shape. However, I believe that the graphics context passed to the paint method has been rotated counter clockwise by 90 degrees. I had assumed that (0,0) would be upper left corner. But (0,0) is lower left corner and (0,height) is lower right corner. Rotate those 90 degrees clockwise and you get them in the (my) expected positions. I also grabbed the AffineTransform from both the paint method and a JPanel paintComponent method. If you examine the trig values for each transformation you will see they are different.

    I would appreciate some feedback/confirmation on this as to whether I am correct or not. It is not documented in the paint interface. It could just be related to the Nimbus look and feel. I have not checked out others. I did a web search and did not see any info regarding this.

    Attached is my modified version of KevinWorkman's code posted in Changing the Foreground Color of ArrowButton of JComboBox in nimbus LaF. I commented out the part that draws the Triangle (It points right instead of down). The key are the circles which should locate the top left and bottom left points.


    Java Code:
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Polygon;
    import java.awt.geom.AffineTransform;
    import java.lang.reflect.InvocationTargetException;
    
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.Painter;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UIManager.LookAndFeelInfo;
    
    
    public class Test {
       public static void main(String[] args) throws InvocationTargetException,
             InterruptedException {
          SwingUtilities.invokeAndWait(new Runnable() {
             public void run() {
    
                try {
                   for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                      if ("Nimbus".equals(info.getName())) {
                         UIManager.setLookAndFeel(info.getClassName());
                         break;
                      }
                   }
                }
                catch (Exception e) {
                   // If Nimbus is not available, you can set the GUI to another
                   // look and feel.
                }
    
                UIManager.getLookAndFeelDefaults().
    put("ComboBox:\"ComboBox.arrowButton\"[Enabled].foregroundPainter",  new MyPainter(Color.red));
                UIManager.getLookAndFeelDefaults().
    put("ComboBox:\"ComboBox.arrowButton\"[MouseOver].foregroundPainter",  new MyPainter(Color.red));
                JComboBox<String> comboBox = new JComboBox<>();
                comboBox.addItem("one");
                comboBox.addItem("two");
                comboBox.addItem("three");
    
                JFrame frame = new JFrame();
                JPanel panel = new JPanel() {
                   public void paintComponent(Graphics g) {
                      Graphics2D g2d = (Graphics2D)g;
                      AffineTransform af = g2d.getTransform();
                      System.out.println("Panel = " + af);
                   }
                };
                frame.add(panel);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                panel.add(comboBox);
                frame.setPreferredSize(new Dimension(300, 300));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
             }
          });
       }
    
       public static class MyPainter implements Painter<Component> {
          private Color color;
    
          public MyPainter(Color color) {
             this.color = color;
          }
    
          @Override
          public void paint(Graphics2D g, Component object, int width, int height) {
             g.setColor(color);
             AffineTransform af  = g.getTransform();
             System.out.println(af);
             System.out.println(width + "  " + height);
             Polygon p = new Polygon();
             int offx = 3;
             int offy = 5;
             
             g.fillOval(0, 0, 5, 5);  // should be at upper left
             g.fillOval(0, height-offy, 5,5); // should be at lower left
             
    //         // Add top base of inverted triangle
    //         p.addPoint(offx, offy);
    //         p.addPoint(width - offx,offy);
    //         //right side
    //         p.addPoint(width/2,height - offy);
    //         // left side
    //         p.addPoint(offx, offy);
    //         g.fillPolygon(p);
          }
       }
    }
    Regards,
    Jim
    The JavaTM Tutorials | SSCCE | Java Naming Conventions
    Poor planning on your part does not constitute an emergency on my part

  2. #2
    KevinWorkman's Avatar
    KevinWorkman is offline Crazy Cat Lady
    Join Date
    Oct 2010
    Location
    Washington, DC
    Posts
    4,001
    Rep Power
    10

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    This is a weird one.

    I added this line to your MyPainter.paint method, just to see where this is coming from, since something up the painting chain has rotated the Graphics:

    Java Code:
          public void paint(Graphics2D g, Component object, int width, int height) {
        	  
        	  new Exception().printStackTrace();
    That tells us who is calling the paint method:

    Java Code:
    at Test$MyPainter.paint(Test.java:76)
    	at Test$MyPainter.paint(Test.java:1)
    	at javax.swing.plaf.nimbus.SynthPainterImpl.paint(Unknown Source)
    	at javax.swing.plaf.nimbus.SynthPainterImpl.paintForeground(Unknown Source)
    	at javax.swing.plaf.nimbus.SynthPainterImpl.paintArrowButtonForeground(Unknown Source)
    	at javax.swing.plaf.synth.SynthArrowButton$SynthArrowButtonUI.paint(Unknown Source)
    	at javax.swing.plaf.synth.SynthButtonUI.update(Unknown Source)
    	at javax.swing.JComponent.paintComponent(Unknown Source)
    So we see this javax.swing.plaf.nimbus.SynthPainterImpl class, which for whatever reason I can't get to from my JDK's source. Okay, to google! I find this online version of the source: GC: SynthPainterImpl - javax.swing.plaf.nimbus.SynthPainterImpl (.java) - GrepCode Class Source

    Taking a look at the paintArrowButtonForeground() method, we get this:

    Java Code:
     public void paintArrowButtonForeground(SynthContext context,
                                               Graphics g, int x, int y,
                                               int w, int h,
                                               int direction) {
            //assume that the painter is arranged with the arrow pointing... LEFT?
            String compName = context.getComponent().getName();
            boolean ltr = context.getComponent().
                    getComponentOrientation().isLeftToRight();
            // The hard coding for spinners here needs to be replaced by a more
            // general method for disabling rotation
            if ("Spinner.nextButton".equals(compName) ||
                    "Spinner.previousButton".equals(compName)) {
                if (ltr){
                    paintForeground(context, g, x, y, w, h, null);
                } else {
                    AffineTransform transform = new AffineTransform();
                    transform.translate(w, 0);
                    transform.scale(-1, 1);
                    paintForeground(context, g, x, y, w, h, transform);
                }
            } else if (direction == SwingConstants.WEST) {
                paintForeground(context, g, x, y, w, h, null);
            } else if (direction == SwingConstants.NORTH) {
                if (ltr){
                    AffineTransform transform = new AffineTransform();
                    transform.scale(-1, 1);
                    transform.rotate(Math.toRadians(90));
                    paintForeground(context, g, y, 0, h, w, transform);
                } else {
                    AffineTransform transform = new AffineTransform();
                    transform.rotate(Math.toRadians(90));
                    transform.translate(0, -(x + w));
                    paintForeground(context, g, y, 0, h, w, transform);
                }
            } else if (direction == SwingConstants.EAST) {
                AffineTransform transform = new AffineTransform();
                transform.translate(w, 0);
                transform.scale(-1, 1);
                paintForeground(context, g, x, y, w, h, transform);
            } else if (direction == SwingConstants.SOUTH) {
                if (ltr){
                    AffineTransform transform = new AffineTransform();
                    transform.rotate(Math.toRadians(-90));
                    transform.translate(-h, 0);
                    paintForeground(context, g, y, x, h, w, transform);
                } else {
                    AffineTransform transform = new AffineTransform();
                    transform.scale(-1, 1);
                    transform.rotate(Math.toRadians(-90));
                    transform.translate(-(h+y), -(w+x));
                    paintForeground(context, g, y, x, h, w, transform);
                }
            }
        }
    I'm gathering that this method takes as an argument the direction the arrow should face, and then depending on what that direction is, it creates an AffineTransform to point the arrow in the correct direction. Weird.

    That code eventually leads to the SynthPainterImpl.paint() method, which is where the actual rotation happens:

    Java Code:
        private void paint(Painter p, SynthContext ctx, Graphics g, int x, int y,
                           int w, int h, AffineTransform transform) {
            if (p != null) {
                if (g instanceof Graphics2D){
                    Graphics2D gfx = (Graphics2D)g;
                    if (transform!=null){
                        gfx.transform(transform);
                    }
                    gfx.translate(x, y);
                    p.paint(gfx, ctx.getComponent(), w, h);
                    gfx.translate(-x, -y);
                    if (transform!=null){
                        try {
                            gfx.transform(transform.createInverse());
                        } catch (NoninvertibleTransformException e) {
                            // this should never happen as we are in control of all
                            // calls into this method and only ever pass in simple
                            // transforms of rotate, flip and translates
                            e.printStackTrace();
                        }
                    }
                } else {
                    // use image if we are printing to a Java 1.1 PrintGraphics as
                    // it is not a instance of Graphics2D
                    BufferedImage img = new BufferedImage(w,h,
                            BufferedImage.TYPE_INT_ARGB);
                    Graphics2D gfx = img.createGraphics();
                    if (transform!=null){
                        gfx.transform(transform);
                    }
                    p.paint(gfx, ctx.getComponent(), w, h);
                    gfx.dispose();
                    g.drawImage(img,x,y,null);
                    img = null;
                }
            }
        }
    The p.paint(gfx, ctx.getComponent(), w, h); method call is what calls our MyPainter.paint() method, and it's passing in the Graphics that were rotated by the SytnhPainterImpl.paint() method, and the rotations were created in the SynthPainterImpl.paintForeground() method as a (seemingly strange) way to get the arrow to point in the correct direction.

    I guess the idea is that our Painter should paint the arrow facing the default direction (left?), and the Nimbus L&F will handle the rotations for us. That way we can use the same painter for multiple arrows? Although in this case since you're creating the Painter for a very specific component, it's a little more convoluted.
    AlexGraal likes this.
    How to Ask Questions the Smart Way
    Static Void Games - Play indie games, learn from game tutorials and source code, upload your own games!

  3. #3
    gimbal2 is offline Just a guy
    Join Date
    Jun 2013
    Location
    Netherlands
    Posts
    4,157
    Rep Power
    6

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    No as long as I've been doing custom painting, the orientation was always from the top-left.

    I hackfixed the above code to just do the rectangle painting in the panel's paintComponent and with the default L&F it just paints the way you would expect it - but also when using the nimbus look & feel. So it is specific within that Painter object that the orientation is different.

    Java Code:
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Polygon;
    import java.awt.geom.AffineTransform;
    import java.lang.reflect.InvocationTargetException;
     
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.Painter;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UIManager.LookAndFeelInfo;
     
     
    public class Test {
       public static void main(String[] args) throws InvocationTargetException,
             InterruptedException {
          SwingUtilities.invokeAndWait(new Runnable() {
             public void run() {
     
                try {
                   for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                      if ("Nimbus".equals(info.getName())) {
                         UIManager.setLookAndFeel(info.getClassName());
                         break;
                      }
                   }
                }
                catch (Exception e) {
                   // If Nimbus is not available, you can set the GUI to another
                   // look and feel.
                }
     
                UIManager.getLookAndFeelDefaults().
    put("ComboBox:\"ComboBox.arrowButton\"[Enabled].foregroundPainter",  new MyPainter(Color.red));
                UIManager.getLookAndFeelDefaults().
    put("ComboBox:\"ComboBox.arrowButton\"[MouseOver].foregroundPainter",  new MyPainter(Color.red));
                JComboBox<String> comboBox = new JComboBox<>();
                comboBox.addItem("one");
                comboBox.addItem("two");
                comboBox.addItem("three");
     
                JFrame frame = new JFrame();
                JPanel panel = new JPanel() {
                   public void paintComponent(Graphics go) {
             
                         // hack hack hackety hack
    	             Graphics2D g = (Graphics2D) go;
    		         g.setColor(Color.red);
                     AffineTransform af  = g.getTransform();
                     Polygon p = new Polygon();
                     int offx = 3;
                     int offy = 5;
    		         int width = 20;
    		         int height = 20;
              
                     g.fillOval(0, 0, 5, 5);  // should be at upper left
                     g.fillOval(0, height-offy, 5,5); // should be at lower left
              
                     // Add top base of inverted triangle
                     p.addPoint(offx, offy);
                     p.addPoint(width - offx,offy);
                     //right side
                     p.addPoint(width/2,height - offy);
                     // left side
                     p.addPoint(offx, offy);
                     g.fillPolygon(p);
                   }
                };
                frame.add(panel);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                panel.add(comboBox);
                frame.setPreferredSize(new Dimension(300, 300));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
             }
          });
       }
     
       public static class MyPainter implements Painter<Component> {
          private Color color;
     
          public MyPainter(Color color) {
             this.color = color;
          }
     
          @Override
          public void paint(Graphics2D g, Component object, int width, int height) {
             g.setColor(color);
             AffineTransform af  = g.getTransform();
             System.out.println(af);
             System.out.println(width + "  " + height);
             Polygon p = new Polygon();
             int offx = 3;
             int offy = 5;
              
             g.fillOval(0, 0, 5, 5);  // should be at upper left
             g.fillOval(0, height-offy, 5,5); // should be at lower left
              
             // Add top base of inverted triangle
             p.addPoint(offx, offy);
             p.addPoint(width - offx,offy);
             //right side
             p.addPoint(width/2,height - offy);
             // left side
             p.addPoint(offx, offy);
             g.fillPolygon(p);
          }
       }
    }
    EDIT: woohoo, ninja'd by Kev ;)
    "Syntactic sugar causes cancer of the semicolon." -- Alan Perlis

  4. #4
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    Northern Virginia, United States
    Posts
    3,807
    Rep Power
    5

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    Thanks guys! It took me about 20 minutes to figure what was happening because I kept thinking I was getting the
    coordinates of my inverted arrow wrong. Since the original authors chose to pass a rotated graphics instance to the
    paint method, it would seem to me that they are violating the Painter interface contract since that was not documented.
    All graphics coordinate systems should be consistent where (0,0) is upper left corner of target space. At least that imho.

    Regards,
    Jim
    Last edited by jim829; 08-14-2014 at 08:10 PM.
    The JavaTM Tutorials | SSCCE | Java Naming Conventions
    Poor planning on your part does not constitute an emergency on my part

  5. #5
    KevinWorkman's Avatar
    KevinWorkman is offline Crazy Cat Lady
    Join Date
    Oct 2010
    Location
    Washington, DC
    Posts
    4,001
    Rep Power
    10

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    Quote Originally Posted by jim829 View Post
    Since the original authors chose to pass a rotated graphics instance to the
    paint method, it would seem to me that they are violating the Painter interface contract since that was not documented.
    All graphics coordinate systems should be consistent where (0,0) is upper left corner of target space. At least that imho.
    I could see that argument, but then again, nowhere does it say that the Graphics passed in **must** be unmodified. The closest I could find was this:

    From the Painter API, the paint() method (emphasis mine):

    Renders to the given Graphics2D object. Implementations of this method may modify state on the Graphics2D, and are not required to restore that state upon completion. In most cases, it is recommended that the caller pass in a scratch graphics object. The Graphics2D must never be null.
    So we've got a "most cases" and a "recomended", but not a "must" when it comes to the Graphics passed into the method. Compare that to the **must** never be null, where we can at least guarantee we'll never get a null value. Although the next line basically says "oh also this method might just ignore what you tell it and reset the Graphics anyway", so it seems a bit contradictory:

    State on the graphics object may be honored by the paint method, but may not be. For instance, setting the antialiasing rendering hint on the graphics may or may not be respected by the Painter implementation.
    The inclusion of that line suggests that the authors of the Painter class meant for people to at least be able to modify the Graphics going into the paint() method. I agree that they could have made it a little more obvious though.

    I think this is a special case, and exists so that all arrows (in dropdowns, spinners, and scrollbars) can look the same by using the same Painter. I don't think this is as severe as violating the paint() or Graphics contracts, and in fact I've seen code that modified Graphics instances before passing them to a painting method. It's a weird little quirk of Nimbus, but I don't think it's a violation or anything.
    How to Ask Questions the Smart Way
    Static Void Games - Play indie games, learn from game tutorials and source code, upload your own games!

  6. #6
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    Northern Virginia, United States
    Posts
    3,807
    Rep Power
    5

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    What they say makes no sense to me because it prohibits reuse. The Painter API implies you should be able to use existing painter implementations by stating:

    Painters are simply encapsulations of Java2D code and make it fairly trivial to reuse existing Painters or to combine them together. Implementations of this interface are also trivial to write, such that if you can't find a Painter that does what you need, you can write one with minimal effort. Writing a Painter requires knowledge of Java2D.
    How can one possibly reuse an existing painter if they have no clue as to the state of the graphics context (at least in terms of transforms)? Perhaps there is a way to reset the context but it does not exist as a method of those classes. To me it's analogous of having a trig function and the implementers don't tell you whether the argument is in radians or degrees.

    Regards,
    Jim
    The JavaTM Tutorials | SSCCE | Java Naming Conventions
    Poor planning on your part does not constitute an emergency on my part

  7. #7
    KevinWorkman's Avatar
    KevinWorkman is offline Crazy Cat Lady
    Join Date
    Oct 2010
    Location
    Washington, DC
    Posts
    4,001
    Rep Power
    10

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    From what a gather, a particular Painter will say something like "I'll draw an arrow that points left", then you can modify the Graphics instance you pass in accordingly to rotate it however you want.

    Another example might be a Painter that draws a horizontal gradient. To create a vertical gradient, instead of creating a whole new class, you can just rotate the Graphics instance you pass into the Painter. Similarly, maybe a Painter draws some text, but you set the font or color or whatever by modifying the Graphics instance that you pass into it.

    In that way, the fact that the Graphics instance passed into a Painter actually *encourages* reuse of Painters.

    In this example we're looking at it from the opposite direction: we're creating the Painter that gets the Graphics class, so the usefulness of modified Graphics is a bit harder to see. But since the API tells us that the Graphics class might be modified by the caller, and it also says that we're allowed to ignore whatever settings we want, we should probably manually set any settings (color, font, rotation, etc) that we want to ignore.
    How to Ask Questions the Smart Way
    Static Void Games - Play indie games, learn from game tutorials and source code, upload your own games!

  8. #8
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    Northern Virginia, United States
    Posts
    3,807
    Rep Power
    5

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    I understand what you said and can see it that way. I believe my problem stems from the fact (at least I believe it's so) is that you can
    assign a new color, new font, new Rendering context. But I have not come across any method to reset the rotational transform such
    that it restores the origin to the upper left corner. I believe it could be done by interrogating the current transform and then rotating
    accordingly. Anyway, thanks for the comments.

    Regards,
    Jim
    The JavaTM Tutorials | SSCCE | Java Naming Conventions
    Poor planning on your part does not constitute an emergency on my part

  9. #9
    KevinWorkman's Avatar
    KevinWorkman is offline Crazy Cat Lady
    Join Date
    Oct 2010
    Location
    Washington, DC
    Posts
    4,001
    Rep Power
    10

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    Yeah, I was looking for something like a Graphics.reset() function, but I couldn't find one. That part is annoying.
    How to Ask Questions the Smart Way
    Static Void Games - Play indie games, learn from game tutorials and source code, upload your own games!

  10. #10
    JosAH's Avatar
    JosAH is offline Moderator
    Join Date
    Sep 2008
    Location
    Voorschoten, the Netherlands
    Posts
    13,679
    Blog Entries
    7
    Rep Power
    21

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    Quote Originally Posted by KevinWorkman View Post
    Yeah, I was looking for something like a Graphics.reset() function, but I couldn't find one. That part is annoying.
    Set an AffineTransform in the Graphics2D object that doesn't do anything (i.e. the identity transform)?

    kind regards,

    Jos
    Last edited by JosAH; 08-16-2014 at 03:14 PM.
    cenosillicaphobia: the fear for an empty beer glass

  11. #11
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    Northern Virginia, United States
    Posts
    3,807
    Rep Power
    5

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    Quote Originally Posted by JosAH View Post
    Set an AffineTransform in the Graphics2D object that doesn't do anything (i.e. the identity transform)?
    I do no believe it is as simple as that. According to the return value of getType(), The type of transform set is both
    a rotational transform and a translational transform. The translational coordinates do not represent anything meaningful
    in the current context. You can reset the rotational transform but then the origin changes to what appears to be
    further left than what you want.

    Regards,
    Jim
    The JavaTM Tutorials | SSCCE | Java Naming Conventions
    Poor planning on your part does not constitute an emergency on my part

  12. #12
    JosAH's Avatar
    JosAH is offline Moderator
    Join Date
    Sep 2008
    Location
    Voorschoten, the Netherlands
    Posts
    13,679
    Blog Entries
    7
    Rep Power
    21

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    Quote Originally Posted by jim829 View Post
    I do no believe it is as simple as that. According to the return value of getType(), The type of transform set is both
    a rotational transform and a translational transform. The translational coordinates do not represent anything meaningful
    in the current context. You can reset the rotational transform but then the origin changes to what appears to be
    further left than what you want.
    Setting the transformation to 'new AffineTransform()' sets the entire transformation to no rotation, no scaling and no translation (it's only a 2x2 matrix and a vector); it should work ...

    kind regards,

    Jos
    cenosillicaphobia: the fear for an empty beer glass

  13. #13
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    Northern Virginia, United States
    Posts
    3,807
    Rep Power
    5

    Default Re: Redrawing the ArrowButton of JComboBox in Nimbus LaF

    I tried this but it doesn't work. I believe it is because you need to preserve the translation. That
    translation changes the origin for drawing the arrow. I think it can be done with the information provided
    but I have not figured it out yet. If you are certain you can do it then please demonstrate it because
    I could be doing something wrong. Note: This has become more of an academic exercise for me as I doubt
    I will ever need to use the capability. But curiosity has taken over.

    Regards,
    Jim
    The JavaTM Tutorials | SSCCE | Java Naming Conventions
    Poor planning on your part does not constitute an emergency on my part

Similar Threads

  1. Replies: 10
    Last Post: 08-13-2014, 05:20 PM
  2. JTable Cell Merge Highlighting and Redrawing Issue
    By officialhopsof in forum AWT / Swing
    Replies: 3
    Last Post: 12-21-2010, 07:32 AM
  3. Redrawing the grid bag layout
    By preethidv in forum AWT / Swing
    Replies: 1
    Last Post: 06-22-2010, 06:23 AM
  4. Help redrawing large image
    By mountaindew4993 in forum Java Applets
    Replies: 4
    Last Post: 12-15-2009, 12:49 AM
  5. problem in redrawing JTable
    By abhinav in forum AWT / Swing
    Replies: 0
    Last Post: 11-21-2007, 10:08 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •