Repaint method not refreshing graphics

I have an application that draws a number of lines (Line2D). It does this by running through an ArrayList of Line2D objects and draws them in the paintComponent method of a particular panel (which works fine).
Now, I have a functionality that allows the user to right click on the line, which brings up a JPopupMenu and allows the user to change the colour of that line. At the end of the mouseClicked method i have a call to area.repaint(), but only the part the popup menu covered is ever repainted... until i cause another mouse event). Either that or i have to force the graphics to be redrawn by minimising/max the window or messing about with the scrollbars.
Does anyone have a better solution, please?
Thanks in advance.

The problem is that the mouseClicked method exits
before the color is chosen. You should make the call
to repaint() in the same method that you change the
color of the line.Hi eewest... Yes, I've tried this too -- doesn't work as well, I'm afraid!
I haven't tried this yet but I've just been told that repeated calls to repaint() concatenate into a single call in the 'AWT thread' (?) and sometimes this can take a while for it to be executed (apparently repaint calls revalidate() and paint() in that order according to that thread --- somehow...). Anyway, the solution i'm told is to do something like this
public void mouseClicked(MouseEvent ev)
//put whatever functionality here
try
Thread.sleep(100);
catch(InterruptedException e){}
finally
myJPanel.repaint();
I'll let you folks know if this actually works tomorow!!
Cheers.

Similar Messages

  • Repaint() method is not working in MAC IE

    Hi All
    why repaint method is not working in MAC IE ? What i am doing is in one class which is inheriting Canvas class getting the keybord input then adding it to main applet.
    Please help me i am trying it for whole week and i couldn't find any solution. I didn't put my code but if anyone is willing to help me i can post it.
    Thanks in advancs
    Shan

    Hi
    Thanks for your reply. Actually i wrote simple applets and those are working well.
    So i did debug the code and i found that when i am running the following code in Apple MAC IE, nothing is happening in handleEvent method. Especially it is not going into the if statement (if (evt.id==401)). here i am checking for KEY_PRESS. I also tried with keyDown method but same problem in MAC IE.
    I am pasting the code that is giving me problem.
    import java.awt.*;
    import java.applet.*;
    public class testApplet extends Applet
    public void init()
    setLayout(new BorderLayout());
    editableArea = new EditableArea();
    editableArea.setBackground(Color.yellow);
    add("Center", editableArea);
    EditableArea editableArea;
    import java.awt.*;
    public class EditableArea extends Canvas
    String s = "";
    public boolean handleEvent(Event evt)
    if (evt.id==401)
    if(evt.key >= 32 && evt.key <= 255)
    char c = (char)evt.key;
    s = s + c;
    repaint();
    return super.handleEvent(evt);
    public void paint( Graphics g )
    g.setColor(Color.blue);
    g.drawString( s,5,15);
    --------------------------------------------------------------------

  • Repaint() method 's not work but paint(getGraphics()) does, why?

    I've just read the following code ( in the Core Java 2 advance features vol 2 book):
      import java.awt.*;
      import java.awt.event.*;
       import java.awt.geom.*;
       import java.util.*;
       import javax.swing.*;
          Shows an animated bouncing ball.
      public class Bounce
         public static void main(String[] args)
            JFrame frame = new BounceFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.show();
         The frame with canvas and buttons.
      class BounceFrame extends JFrame
            Constructs the frame with the canvas for showing the
            bouncing ball and Start and Close buttons
         public BounceFrame()
            setSize(WIDTH, HEIGHT);
            setTitle("Bounce");
            Container contentPane = getContentPane();
            canvas = new BallCanvas();
            contentPane.add(canvas, BorderLayout.CENTER);
            JPanel buttonPanel = new JPanel();
            addButton(buttonPanel, "Start",
               new ActionListener()
                     public void actionPerformed(ActionEvent evt)
                        addBall();
            addButton(buttonPanel, "Close",
               new ActionListener()
                     public void actionPerformed(ActionEvent evt)
                       System.exit(0);
            contentPane.add(buttonPanel, BorderLayout.SOUTH);
            Adds a button to a container.
            @param c the container
            @param title the button title
            @param listener the action listener for the button
         public void addButton(Container c, String title,
            ActionListener listener)
            JButton button = new JButton(title);
            c.add(button);
            button.addActionListener(listener);
            Adds a bouncing ball to the canvas and makes
            it bounce 1,000 times.
         public void addBall()
            try
               Ball b = new Ball(canvas);
               canvas.add(b);
               for (int i = 1; i <= 1000; i++)
                  b.move();
                  Thread.sleep(5);
            catch (InterruptedException exception)
         private BallCanvas canvas;
         public static final int WIDTH = 450;
         public static final int HEIGHT = 350;
        The canvas that draws the balls.
    class BallCanvas extends JPanel
            Add a ball to the canvas.
            @param b the ball to add
       public void add(Ball b)
           balls.add(b);
        public void update(Graphics g) {
             super.update(g);
             System.out.println("Test");
        public void paintComponent(Graphics g)
          super.paintComponent(g);
          Graphics2D g2 = (Graphics2D)g;
          for (int i = 0; i < balls.size(); i++)
             Ball b = (Ball)balls.get(i);
             b.draw(g2);
            // System.out.println("Test");
        private ArrayList balls = new ArrayList();
        A ball that moves and bounces off the edges of a
       component
    class Ball
            Constructs a ball in the upper left corner
            @c the component in which the ball bounces
        public Ball(Component c) { canvas = c; }
           Draws the ball at its current position
           @param g2 the graphics context
        public void draw(Graphics2D g2)
           g2.fill(new Ellipse2D.Double(x, y, XSIZE, YSIZE));
          Moves the ball to the next position, reversing direction
          if it hits one of the edges
       public void move()
          x += dx;
          y += dy;
           if (x < 0)
              x = 0;
              dx = -dx;
         if (x + XSIZE >= canvas.getWidth())
             x = canvas.getWidth() - XSIZE;
              dx = -dx;
           if (y < 0)
             y = 0;
              dy = -dy;
           if (y + YSIZE >= canvas.getHeight())
              y = canvas.getHeight() - YSIZE;
              dy = -dy;
           //canvas.paint(canvas.getGraphics());//this would OK.
           canvas.repaint();//This not work, please tell me why?
        private Component canvas;
        private static final int XSIZE = 15;
       private static final int YSIZE = 15;
       private int x = 0;
       private int y = 0;
       private int dx = 2;
       private int dy = 2;
    }this program create a GUI containing a "add ball" button to creat a ball and make it bounce inside the window. ( this seems to be stupid example but it is just an example of why we should use Thread for the purpose ).
    Note: in the move() method, if i use canvas.repaint() then the ball is not redrawn after each movement. but if i use canvas.paint(canvas.getGraphics()) then everythings seem to be OK.
    Another question: Still the above programe, but If I create the ball and let it bounce in a separate thread, then canvas.repaint() in the move method work OK.
    Any one can tell me why? Thanks alot !!!

    I don't know why the one method works. Based on my Swing knowledge neither method should work. Did you notice that the JButton wasn't repainted until after the ball stopped bouncing. That is because of the following code:
    for (int i = 1; i <= 1000; i++)
        b.move();
        Thread.sleep(5);
    }This code is attempting to move the ball and then sleep for 5 milliseconds. The problem with this code is that you are telling the Event Thread to sleep. Normally painting events are added to the end of the Event Thread to allow for multiple painting requests to be combined into one for painting efficiency. When you tell the Thread to sleep then the GUI doesn't get a chance to repaint itself.
    More details about the EventThread can be found in the Swing tutorial:
    http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
    This explains why the button isn't repainted, but it doesn't explain why the ball bounces. I don't know the answer to this for sure, but I do know that there is a method called paintImmediately(...) which causes the painting to be performed immediately without being added to the end of the Event Thread. This means the painting can be done before the Thread sleeps. Maybe the canvas.paint(....) is somehow invoking this method.
    When you click on the button this code is executed in the EvWell in Swing, all GUI painting is done on the Event Thread

  • Repaint() method is not being called?

    Hi...experts
    I have appended the unicode characters to the StringBuffer .and i draw it on canvas.
    now i want to delete these unicode characters from last index of StringBuffer with the command "Clear" .
    i m using the following code for doing this....
    StringBuffer sb=new StringBuffer();
    sb.append('\u093E');
    sb.append('\u093F');
    sb.append('\u0940');
    sb.deleteCharAt(sb.length()-1);But the StringBuffer is as it is.
    please suggest me how repaint() method works.
    Edited by: RavindraDiwakar on Sep 25, 2008 7:46 AM

    {color:#ff0000}{size:20px}CROSS POSTED{size}{color}
    [http://forums.sun.com/thread.jspa?threadID=5334750]
    [http://forums.sun.com/thread.jspa?threadID=5334748]
    Cross posting is rude.
    db

  • Problem using repaint() method from another class

    I am trying to make tower of hanoi...but unable to transfer rings from a tower to another...i had made three classes....layout21 where all componentents of frame assembled and provided suitable actionlistener.....second is mainPanel which is used to draw the rods n rings in paintComponent.....and third is tower in which code for hanoi is available...i had made an object of mainPanel at layoout21 n tower but i m not able to call repaint from tower..gives an error : cannot find the symbol....method repaint in tower.
    code fragments od three classes are:
    LAYOUT21
    class layout21 extends JFrame implements ActionListener
    { private Vector rod1 = new Vector();
    private Vector rod2 = new Vector();
    private Vector rod3 = new Vector();
    private String elem; //comment
    public String r22;
    public boolean in=false;
    public int count=0; //no of times the transfer to other rods performed
    private int r3,rings; // current no of rings
    private JComboBox nor,col;
    private JLabel no;
    private JLabel moved;
    private JLabel no1;
    private JButton start;
    private JButton ref;
    private AboutDialog dialog;
    private JMenuItem aboutItem;
    private JMenuItem exitItem;
    private tower t;
    final mainPanel2 p =new mainPanel2();
    public layout21()
    { t = new tower();
         Toolkit kit =Toolkit.getDefaultToolkit();
    Image img = kit.getImage("java.gif");
    setIconImage(img);
    setTitle("Tower Of Hanoi");
    setSize(615,615);
    setResizable(false);
    setBackground(Color.CYAN);
         JMenuBar mbar = new JMenuBar();
    setJMenuBar(mbar);
    JMenu fileMenu = new JMenu("File");
    mbar.add(fileMenu);
    aboutItem = new JMenuItem("About");
    aboutItem.addActionListener(this);
    fileMenu.add(aboutItem);
    exitItem = new JMenuItem("Exit");
    exitItem.addActionListener(this);
    fileMenu.add(exitItem);
    Container contentPane =getContentPane();
    JPanel bspanel = new JPanel();
    JPanel bnpanel = new JPanel();
    setBackground(Color.CYAN);
         //JComboBox
    nor = new JComboBox();
    nor.setEditable(false);
    nor.addItem("3");
    nor.addItem("4");
    nor.addItem("5");
    nor.addItem("6");
    nor.addItem("7");
    nor.addItem("8");
    nor.addItem("9");
    bspanel.add(nor);
    col = new JComboBox();
    col.setEditable(false);
    col.addItem("BLACK");
    col.addItem("GREEN");
    col.addItem("CYAN");
    bspanel.add(col);
    JLabel tl = new JLabel("Time");
    tl.setFont(new Font("Serif",Font.BOLD,12));
    bspanel.add(tl);
    JTextField tlag = new JTextField("0",4);
    bspanel.add(tlag);
    start =new JButton("Start");
    bspanel.add(start);
    ref =new JButton("Refresh");
    bspanel.add(ref);
    JButton end =new JButton("End");
    bspanel.add(end);
    start.addActionListener(this);
    nor.addActionListener(this);
    col.addActionListener(this);
    ref.addActionListener(this);
    end.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    dispose(); // Closes the dialog
    contentPane.add(bspanel,BorderLayout.SOUTH);
    JLabel count = new JLabel("No of Transfer reguired:");
    count.setFont(new Font("Serif",Font.BOLD,16));
    bnpanel.add(count);
    no = new JLabel("7");
    no.setFont(new Font("Serif",Font.BOLD,16));
    bnpanel.add(no);
    JLabel moved = new JLabel("Moved:");
    moved.setFont(new Font("Serif",Font.BOLD,16));
    bnpanel.add(moved);
    no1 = new JLabel("0");
    no1.setFont(new Font("Serif",Font.BOLD,16));
    bnpanel.add(no1);
    contentPane.add(bnpanel,BorderLayout.NORTH);
    contentPane.add(p,BorderLayout.CENTER);
         String r = (String)nor.getSelectedItem();
    rings = Integer.valueOf(r).intValue();
    p.draw(rings,1) ;
    public void actionPerformed(ActionEvent evt)
    {  Object source = evt.getSource();
    if(source == start)
    r3 = Integer.valueOf((String)nor.getSelectedItem()).intValue();
    p.transfer(false);
    t.initialise(rod1,rod2,rod3,0);
    t.towerOfHanoi(r3);
         //repaint();
         if(source == ref)
    { rod1.removeAllElements() ;
    rod2.removeAllElements() ;
    rod3.removeAllElements() ;
    count=0;
              r3 = Integer.valueOf((String)nor.getSelectedItem()).intValue();
              p.draw(r3,1);
    p.transfer(true);
    no1.setText(""+0);
    p.trans_vec(rod1,rod2,rod3);
    t.initialise(rod1,rod2,rod3,0);
              System.out.println("");
              repaint();
    if(source == nor)
    { JComboBox j = (JComboBox)source;
    String item = (String)j.getSelectedItem();
    int ring1 = Integer.valueOf(item).intValue();
    int a=1;
    for(int i=1;i<=ring1;i++)
    { a = a*2;
    a=a-1;
    no.setText(""+a);
    p.draw(ring1,1);
    repaint();
    if(source == aboutItem)
    {  if (dialog == null) // first time
    dialog = new AboutDialog(this);
    dialog.setVisible(true);
    if(source == exitItem)
    {  System.exit(0);
         if (source==col)
         { JComboBox j = (JComboBox)source;
    String item = (String)j.getSelectedItem();
              repaint();
    TOWER
    class tower extends Thread
    { private Vector rod1 = new Vector();
    private Vector rod2 = new Vector();
    private Vector rod3 = new Vector();
    private int count ;
    private String elem;
    final mainPanel2 z =new mainPanel2();
    public void initialise(Vector r1,Vector r2,Vector r3,int c)
    { rod1 = r1;
    rod2 = r2;
         rod3 = r3;
         count =c;
    public void towerOfHanoi(int rings)
    for(int i=0;i<rings;i++)
    rod1.add(" "+(i+1));
    System.out.println("rod1:"+rod1.toString());
    hanoi(rings,1,2);
    public void hanoi(int m,int i, int j)
    if(m>0)
    { hanoi(m-1,i,6-i-j);
    if(i==1 && j==2 && rod1.isEmpty()==false)
    { count++;
    //no1.setText(""+count);
    elem = (String)rod1.remove(0);
    rod2.add(0,elem);
         //z.trans_vec(rod1,rod2,rod3);
    repaint(); //NOT ABLE TO USE METHOD HERE...WHY??
    //z.hanoi_paint();
    try
              this.sleep(2000);      
              catch (Exception e) { e.printStackTrace() ;  }
    System.out.println(count+". ROD 2:"+rod2.toString());
    if(i==1 && j==3 && rod1.isEmpty()==false)
    { count++;
         //no1.setText(""+count);
         elem = (String)rod1.remove(0);
    rod3.add(0,elem);
    //z.trans_vec(rod1,rod2,rod3);
    repaint();//
    // z.hanoi_paint();
                   try
              this.sleep(2000);      
              catch (Exception e) { e.printStackTrace() ;  }
    System.out.println(count+". ROD 3:"+rod3.toString());
    if(i==2 && j==1 && rod2.isEmpty()==false)
    { count++;
         //no1.setText(""+count);
         elem = (String)rod2.remove(0);
    rod1.add(0,elem);
    //z.trans_vec(rod1,rod2,rod3);
    repaint();
    //z.hanoi_paint();
    try
              this.sleep(2000);      
              catch (Exception e) { e.printStackTrace() ;  }
    System.out.println(count+". ROD 1:"+rod1.toString());
    if(i==2 && j==3 && rod2.isEmpty()==false)
    { count++;     
         //no1.setText(""+count);
         elem = (String)rod2.remove(0);
    rod3.add(0,elem);
    //z.trans_vec(rod1,rod2,rod3);
    repaint();
    //z.hanoi_paint();
    try
              this.sleep(2000);      
              catch (Exception e) { e.printStackTrace() ;  }
    System.out.println(count+". ROD 3:"+rod3.toString());
    if(i==3 && j==1 && rod3.isEmpty()==false)
    { count++;
         //no1.setText(""+count);
    elem = (String)rod3.remove(0);
    rod1.add(0,elem);
    //z.trans_vec(rod1,rod2,rod3);
    repaint();
    //z.hanoi_paint();
         try
              this.sleep(2000);      
              catch (Exception e) { e.printStackTrace() ;  }
    System.out.println(count+". ROD 1:"+rod1.toString());
    if(i==3 && j==2 && rod3.isEmpty()==false)
    { count++;
         //no1.setText(""+count);
    elem = (String)rod3.remove(0);
    rod2.add(0,elem);
    //z.trans_vec(rod1,rod2,rod3);
    repaint();
    //z.hanoi_paint();
    try
              this.sleep(2000);      
              catch (Exception e) { e.printStackTrace() ;  }
    System.out.println(count+". ROD 2:"+rod2.toString());
    hanoi(m-1,6-i-j,j);
    MAINPANEL
    class mainPanel2 extends JPanel //throws IOException
    public Vector line = new Vector();
    public Vector rod11= new Vector();
    public Vector rod22= new Vector();
    public Vector rod33= new Vector();
    public int no_ring;
    public int rod_no;
    String pixel;
    StringTokenizer st,st1;
    int x,y;
    public boolean initial =true;
    public void paintComponent(Graphics g)
    { System.out.println("repaint test");
    bresenham(100,60,100,360);
         bresenham(101,60,101,360);
    bresenham(102,60,102,360);
    bresenham(103,60,103,360);
    bresenham(104,60,104,360);     
    g.setColor(Color.BLUE);
    while(line.size()>0)
    { pixel = (String)line.remove(0);
    st = new StringTokenizer(pixel);
    x = Integer.valueOf(st.nextToken()).intValue();
    y = Integer.valueOf(st.nextToken()).intValue();
    g.drawLine(x,y,x,y);
    bresenham(300,60,300,360);
    bresenham(301,60,301,360);
    bresenham(302,60,302,360);
    bresenham(303,60,303,360);
    bresenham(304,60,304,360);     
    while(line.size()>0)
    { pixel = (String)line.remove(0);
    st = new StringTokenizer(pixel);
    x = Integer.valueOf(st.nextToken()).intValue();
    y = Integer.valueOf(st.nextToken()).intValue();
    g.drawLine(x,y,x,y);
    bresenham(500,60,500,360);
    bresenham(501,60,501,360);
    bresenham(502,60,502,360);
    bresenham(503,60,503,360);
    bresenham(504,60,504,360);     
    while(line.size()>0)
    { pixel = (String)line.remove(0);
    st = new StringTokenizer(pixel);
    x = Integer.valueOf(st.nextToken()).intValue();
    y = Integer.valueOf(st.nextToken()).intValue();
    g.drawLine(x,y,x,y);
    bresenham(0,361,615,361);//used to get a pixel according to algo.. . func not provided
    bresenham(0,362,615,362);
    bresenham(0,363,615,363);
    bresenham(0,364,615,364);
    bresenham(0,365,615,365);     
    while(line.size()>0)
    { pixel = (String)line.remove(0);
    st = new StringTokenizer(pixel);
    x = Integer.valueOf(st.nextToken()).intValue();
    y = Integer.valueOf(st.nextToken()).intValue();
    g.drawLine(x,y,x,y);
    if(initial==true)
    g.setColor(Color.RED);
    for(int i = no_ring;i>0;i--)
    { g.drawLine(100-(i*8),360-(no_ring - i)*10,100+(i*8)+5,360-(no_ring - i)*10);
    g.drawLine(100-(i*8),359-(no_ring - i)*10,100+(i*8)+5,359-(no_ring - i)*10);
    g.drawLine(100-(i*8),358-(no_ring - i)*10,100+(i*8)+5,358-(no_ring - i)*10);
    g.drawLine(100-(i*8),357-(no_ring - i)*10,100+(i*8)+5,357-(no_ring - i)*10);
    g.drawLine(100-(i*8),356-(no_ring - i)*10,100+(i*8)+5,356-(no_ring - i)*10);
    // draw for each rod
    //System.out.println("rod11:"+rod11);
    //System.out.println("rod22:"+rod22);
    //System.out.println("rod33:"+rod33);
         int r1 = rod11.size();
         int r2 = rod22.size();
         int r3 = rod33.size();
    String rd1,rd2,rd3;
    int r11,r12,r21,r22,r31,r32;
    if(initial == false)
         { g.setColor(Color.RED);
         while(rod11.size()>0)
    { r12 = rod11.size()-1;
              rd1 = (String)rod11.remove(r12);
    r11 = Integer.valueOf(rd1).intValue();
    g.drawLine(100-((r11+1)*8),360-(r1 - (r11+1))*10,100+((r11+1)*8)+5,360-(r1 - (r11+1))*10);
    g.drawLine(100-((r11+1)*8),359-(r1 - (r11+1))*10,100+((r11+1)*8)+5,359-(r1 - (r11+1))*10);
              g.drawLine(100-((r11+1)*8),358-(r1 - (r11+1))*10,100+((r11+1)*8)+5,358-(r1 - (r11+1))*10);
              g.drawLine(100-((r11+1)*8),357-(r1 - (r11+1))*10,100+((r11+1)*8)+5,357-(r1 - (r11+1))*10);
              g.drawLine(100-((r11+1)*8),356-(r1 - (r11+1))*10,100+((r11+1)*8)+5,356-(r1 - (r11+1))*10);
         while(rod22.size()>0)
    { g.setColor(Color.RED);
              r22 = rod22.size()-1;
         System.out.println("TEST *************************:"+r22);
              try
         // e.printStackTrace();      
              InputStreamReader isr = new InputStreamReader(System.in);
         BufferedReader br = new BufferedReader(isr)      ;
         br.readLine() ;
         }catch(Exception f) {}
              rd2 = ((String)rod22.remove(r22)).trim();
    r21 = Integer.valueOf(rd2).intValue();
    g.drawLine(300-((r22+1)*8),360-(r2 - (r22+1))*10,300+((r22+1)*8)+5,360-(r2 - (r22+1))*10);
    g.drawLine(300-((r22+1)*8),359-(r2 - (r22+1))*10,300+((r22+1)*8)+5,359-(r2 - (r22+1))*10);
              g.drawLine(300-((r22+1)*8),358-(r2 - (r22+1))*10,300+((r22+1)*8)+5,358-(r2 - (r22+1))*10);
              g.drawLine(300-((r22+1)*8),357-(r2 - (r22+1))*10,300+((r22+1)*8)+5,357-(r2 - (r22+1))*10);
              g.drawLine(300-((r22+1)*8),356-(r2 - (r22+1))*10,300+((r22+1)*8)+5,356-(r2 - (r22+1))*10);
         while(rod33.size()>0)
    { g.setColor(Color.RED);
              r32 = rod33.size()-1;
              rd3 = (String)rod33.remove(r32);
    r31 = Integer.valueOf(rd3).intValue();
    g.drawLine(500-((r32+1)*8),360-(r3 - (r32+1))*10,500+((r32+1)*8)+5,360-(r3 - (r32+1))*10);
    g.drawLine(500-((r32+1)*8),359-(r3 - (r32+1))*10,500+((r32+1)*8)+5,359-(r3 - (r32+1))*10);
              g.drawLine(500-((r32+1)*8),358-(r3 - (r32+1))*10,500+((r32+1)*8)+5,358-(r3 - (r32+1))*10);
              g.drawLine(500-((r32+1)*8),357-(r3 - (r32+1))*10,500+((r32+1)*8)+5,357-(r3 - (r32+1))*10);
              g.drawLine(500-((r32+1)*8),356-(r3 - (r32+1))*10,500+((r32+1)*8)+5,356-(r3 - (r32+1))*10);
    why i m not able to use repaint() method in tower class? from where i can use repaint() method

    i can't read your code - not formatted with code tags
    I have no chance of getting it to compile (AboutDialog class?? p.draw() ??)
    here's a basic routine - add a couple of things to this to demonstrate what is not
    being redrawn
    (compare the readability of below code (using tags) to yours)
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    class Testing extends JFrame
      public Testing()
        setSize(400,300);
        setLocation(400,300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        final DrawPanel dp = new DrawPanel();
        JButton btn = new JButton("Change Text Location/Repaint");
        getContentPane().add(dp,BorderLayout.CENTER);
        getContentPane().add(btn,BorderLayout.SOUTH);
        btn.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent ae){
            dp.x = (int)(Math.random()*300);
            dp.y = (int)(Math.random()*150)+50;
            repaint();}});
      public static void main(String[] args){new Testing().setVisible(true);}
    class DrawPanel extends JPanel
      int x = 50, y = 50;
      public void paintComponent(Graphics g)
        super.paintComponent(g);
        g.drawString("Hello World",x,y);
    }

  • SetJPEGEncodeParam method not found in JPEGImageEncoder jdk 1.5 and jdk 1.6

    Hi,
    We are group of students working on college project.
    We want to capture webcam and show stream on screen.
    We are using JMF and class JPEGImageEncoder.
    Here we are getting setJPEGEncodeParam method not found error.
    Please see detail error message and source code attached below.
    Thanks in advance.
    Regards,
    Vinayak & Surendra
    // Error and Warnings
    SwingCapture.java:125: warning: com.sun.image.codec.jpeg.JPEGImageEncoder is Sun proprietary API and may be removed in a future release
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    ^
    SwingCapture.java:125: warning: com.sun.image.codec.jpeg.JPEGCodec is Sun proprietary API and may be removed in a future release
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    ^
    SwingCapture.java:126: warning: com.sun.image.codec.jpeg.JPEGEncodeParam is Sun proprietary API and may be removed in a future release
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
    ^
    SwingCapture.java:128: cannot find symbol
    symbol : method setJPEGEncodeParam(com.sun.image.codec.jpeg.JPEGEncodeParam)
    location: class com.sun.image.codec.jpeg.JPEGImageEncoder
         encoder.setJPEGEncodeParam(param);
    ^
    1 error
    3 warnings
    // Source code
    import javax.swing.*;
    import javax.swing.event.*;
    import java.io.*;
    import javax.media.*;
    import javax.media.format.*;
    import javax.media.util.*;
    import javax.media.control.*;
    import javax.media.protocol.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.image.*;
    import java.awt.event.*;
    import com.sun.image.codec.jpeg.*;
    public class SwingCapture extends Panel implements ActionListener
    public static Player player = null;
    public CaptureDeviceInfo di = null;
    public MediaLocator ml = null;
    public JButton capture = null;
    public Buffer buf = null;
    public Image img = null;
    public VideoFormat vf = null;
    public BufferToImage btoi = null;
    public ImagePanel imgpanel = null;
    public SwingCapture()
    setLayout(new BorderLayout());
    setSize(320,550);
    imgpanel = new ImagePanel();
    capture = new JButton("Capture");
    capture.addActionListener(this);
    String str1 = "vfw:Logitech USB Video Camera:0";
    String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
    di = CaptureDeviceManager.getDevice(str2);
    ml = di.getLocator();
    try
    player = Manager.createRealizedPlayer(ml);
    player.start();
    Component comp;
    if ((comp = player.getVisualComponent()) != null)
    add(comp,BorderLayout.NORTH);
    add(capture,BorderLayout.CENTER);
    add(imgpanel,BorderLayout.SOUTH);
    catch (Exception e)
    e.printStackTrace();
    public static void main(String[] args)
    Frame f = new Frame("SwingCapture");
    SwingCapture cf = new SwingCapture();
    f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    playerclose();
    System.exit(0);}});
    f.add("Center",cf);
    f.pack();
    f.setSize(new Dimension(320,550));
    f.setVisible(true);
    public static void playerclose()
    player.close();
    player.deallocate();
    public void actionPerformed(ActionEvent e)
    JComponent c = (JComponent) e.getSource();
    if (c == capture)
    // Grab a frame
    FrameGrabbingControl fgc = (FrameGrabbingControl)
    player.getControl("javax.media.control.FrameGrabbingControl");
    buf = fgc.grabFrame();
    // Convert it to an image
    btoi = new BufferToImage((VideoFormat)buf.getFormat());
    img = btoi.createImage(buf);
    // show the image
    imgpanel.setImage(img);
    // save image
    saveJPG(img,"c:\\test.jpg");
    class ImagePanel extends Panel
    public Image myimg = null;
    public ImagePanel()
    setLayout(null);
    setSize(320,240);
    public void setImage(Image img)
    this.myimg = img;
    repaint();
    public void paint(Graphics g)
    if (myimg != null)
    g.drawImage(myimg, 0, 0, this);
    public static void saveJPG(Image img, String s)
    BufferedImage bi = new BufferedImage(img.getWidth(null),
    img.getHeight(null), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = bi.createGraphics();
    g2.drawImage(img, null, null);
    FileOutputStream out = null;
    try
    out = new FileOutputStream(s);
    catch (java.io.FileNotFoundException io)
    System.out.println("File Not Found");
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
    param.setQuality(0.5f,false);
    encoder.setJPEGEncodeParam(param);
    try
    encoder.encode(bi);
    out.close();
    catch (java.io.IOException io)
    System.out.println("IOException");

    JPEGImageEncoder isn't a JMF class...so this isn't a JMF question. You need to go to the appropriate forum, which would be Java2D, I believe.
    Also, is there a specific reason you're not just capturing from your web camera directly?

  • SetJPEGEncodeParam method not found

    Hi,
    We are group of students working on college project.
    We want to capture webcam and show stream on screen.
    We are using JMF and class JPEGImageEncoder.
    Here we are getting setJPEGEncodeParam method not found error.
    Please see detail error message and source code attached below.
    Thanks in advance.
    Regards,
    Vinayak & Surendra
    // Error and Warnings
    SwingCapture.java:125: warning:
    com.sun.image.codec.jpeg.JPEGImageEncoder is Sun proprietary API and
    may be removed in a future release
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    ^
    SwingCapture.java:125: warning: com.sun.image.codec.jpeg.JPEGCodec is
    Sun proprietary API and may be removed in a future release
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    ^
    SwingCapture.java:126: warning:
    com.sun.image.codec.jpeg.JPEGEncodeParam is Sun proprietary API and
    may be removed in a future release
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
    ^
    SwingCapture.java:128: cannot find symbol
    symbol : method setJPEGEncodeParam
    (com.sun.image.codec.jpeg.JPEGEncodeParam)
    location: class com.sun.image.codec.jpeg.JPEGImageEncoder
    encoder.setJPEGEncodeParam(param);
    ^
    1 error
    3 warnings
    // Source code
    import javax.swing.;
    import javax.swing.event.;
    import java.io.;
    import javax.media.;
    import javax.media.format.;
    import javax.media.util.;
    import javax.media.control.;
    import javax.media.protocol.;
    import java.util.;
    import java.awt.;
    import java.awt.image.;
    import java.awt.event.;
    import com.sun.image.codec.jpeg.*;
    public class SwingCapture extends Panel implements ActionListener
    public static Player player = null;
    public CaptureDeviceInfo di = null;
    public MediaLocator ml = null;
    public JButton capture = null;
    public Buffer buf = null;
    public Image img = null;
    public VideoFormat vf = null;
    public BufferToImage btoi = null;
    public ImagePanel imgpanel = null;
    public SwingCapture()
    setLayout(new BorderLayout());
    setSize(320,550);
    imgpanel = new ImagePanel();
    capture = new JButton("Capture");
    capture.addActionListener(this);
    String str1 = "vfw:Logitech USB Video Camera:0";
    String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
    di = CaptureDeviceManager.getDevice(str2);
    ml = di.getLocator();
    try
    player = Manager.createRealizedPlayer(ml);
    player.start();
    Component comp;
    if ((comp = player.getVisualComponent()) != null)
    add(comp,BorderLayout.NORTH);
    add(capture,BorderLayout.CENTER);
    add(imgpanel,BorderLayout.SOUTH);
    catch (Exception e)
    e.printStackTrace();
    public static void main(String[] args)
    Frame f = new Frame("SwingCapture");
    SwingCapture cf = new SwingCapture();
    f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    playerclose();
    System.exit(0);}});
    f.add("Center",cf);
    f.pack();
    f.setSize(new Dimension(320,550));
    f.setVisible(true);
    public static void playerclose()
    player.close();
    player.deallocate();
    public void actionPerformed(ActionEvent e)
    JComponent c = (JComponent) e.getSource();
    if (c == capture)
    // Grab a frame
    FrameGrabbingControl fgc = (FrameGrabbingControl)
    player.getControl("javax.media.control.FrameGrabbingControl");
    buf = fgc.grabFrame();
    // Convert it to an image
    btoi = new BufferToImage((VideoFormat)buf.getFormat());
    img = btoi.createImage(buf);
    // show the image
    imgpanel.setImage(img);
    // save image
    saveJPG(img,"c:\\test.jpg");
    class ImagePanel extends Panel
    public Image myimg = null;
    public ImagePanel()
    setLayout(null);
    setSize(320,240);
    public void setImage(Image img)
    this.myimg = img;
    repaint();
    public void paint(Graphics g)
    if (myimg != null)
    g.drawImage(myimg, 0, 0, this);
    public static void saveJPG(Image img, String s)
    BufferedImage bi = new BufferedImage(img.getWidth(null),
    img.getHeight(null), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = bi.createGraphics();
    g2.drawImage(img, null, null);
    FileOutputStream out = null;
    try
    out = new FileOutputStream(s);
    catch (java.io.FileNotFoundException io)
    System.out.println("File Not Found");
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
    param.setQuality(0.5f,false);
    encoder.setJPEGEncodeParam(param);
    try
    encoder.encode(bi);
    out.close();
    catch (java.io.IOException io)
    System.out.println("IOException");
    }

    look at: javax.imageio.ImageIO
    File myFile = new File(myFileName);
    myFile.createNewFile();
    ImageIO.write(myImage, "JPEG", myFile);also post your code with code tags--otherwise the forum software will alter your code, using some of it as formatting sequences.

  • Refresh graphics in applet....

    hi,
    I have an panel in my applet that draw shapes on it.
    In my panel (a class that extends JPanel) I have some draw functions:
    class x extends JPanel{
    public void draw_function1(Graphics g){..}
    public void draw_function2(Graphics g){..}
    public void draw_function3(Graphics g){..}
    My panel does not update graphics when I minimize the window or anything that requires refresh.
    I CAN'T insert all my functions inside paint() method because the shapes are not drawn at the same time, it depends on the user events...
    how can I restore the previous graphics and draw more graphics ???
    thanks.

    Try the update(g) for the Applet.

  • Repaint() is not thread-safe?

    I saw a description that says repaint() is thread-safe in an old swing tutorial, but not in the current tutorial and its javadoc. So can I assume repaint() is not thread-safe and I should call it from EDT? ... Or if they are thread-safe, why does Sun not document it?

    repaint() calls paint() on EDT... but it calculates dirty region on the current thread and does not get AWTTreeLock.I don't think so.
    repaint() is a java.awt.Component method and doesn't know about Swing's RepaintManager and dirty regions. There may be somthing similar at the AWT level that escaped me, but looking at the JDK1.6 source code, java.awt.Component.repaint() just repaints the whole component.
    Now repaint(long, int, int, int, int) has two versions.
    At the AWT level, it just posts a paint event for the specified region. No race condition, and no risk that he region be wrong, but possibility to invoke multiple paint(Graphics) that overlap, that is, to paint several times the same area - it may be an optimization problem, but it doesn't jeopardize the consistency of the drawing.
    At the Swing level, it does compute dirty regions. In Repaint manageer, the call to extendDirtyRegion(...) is protected within a synchronized block, but the code before that is not. From a quick look, that code is:
    1) walking up the component hierarchy to find the root, which may not be thread-safe, but a well-behaved application shouldn't change the hierarchy from outside the EDT.
    2) walking up a chain of "delegate" RepaintManager, which I knew nothing about... Apparently it's a sun's implementation specific construct, each JComponent can be assigne d a delegate RepaintManager. Again I would claim that such things should not happen outside of the EDT, but I haven't found documentation about this.
    Edited by: jduprez on Jul 20, 2009 2:37 PM
    so no, technically, I can't prove repaint(long, int,int,int,int) is thread-safe.
    But a well-behaved application that updates its widgets on the EDT shouldn't worry (that is, repaint(...) calls can still be invoked outside of the EDT).
    Edited by: jduprez on Jul 21, 2009 7:04 PM - typos

  • Simple repaint() method doubt

    Hi Friends,
    I have a simple program in which I need to print 2 strings at the same time.So,I pass the string and the location to the paint method,but the second repaint() method erases the first
    string and only the second string is displayed.So,how can i make both the strings display at the same time.Here's a part of my code.
    doPaint("String one",200,200);
    validate();
    doPaint("String two",200,250);
    validate();
    public void doPaint(String str,width x,height y){
                                this.x = x;
                                this.y = y;
                this.str=str;
               repaint();
    public void paint(Graphics g){
                            super.paint(g);
            g.setColor(Color.BLUE);
            g.drawString(str,x,y);
         }Thanks

    repaint()clears the component and fills it from the scratch, so when you call your function for the second time it clears first string and draws only the second.
    I advise to use two variables if you want them painted together.
    And override paintComponent() not paint()

  • Alternative for repaint() method

    Hello,
    I am using repaint() method to redraw the components in my screen. Is there any alternative method. In the code below, i will try to explain what i am trying to do.
    class Sample{
    JFrame frame = new JFrame();
    DrawPanel drawPanel = new DrawPanel();
    frame.getContentPane().add(drawPanel);
    callMethod();
    public void callMethod()
    frame.repaint(); //This will call paintComponent again, whether can i do it without repaint() [An alternative approach].
    //This is class is in a diff file
    class DrawPanel extends JPanel{
    public void paintComponent(graphics g)
    Graphics2D g2d = (Graphics2D) g;
    drawRec();
    public void drawRec()
    g2d.fillRect(x,y,100,203);
    Say on clicking a button, i want to draw rectangle with different sizes. How can i do it without calling repaint().
    Please help.
    Thank you.

    I don't get why you don't want to call repaint().
    I can see why you wouldn't want to repaint() the whole frame if only one of its widgets needs to update its appearance, but wishing to redraw a JComponent without going calling repaint() on at least this leaf widget is a way to get into trouble.
    That being said, there's paintImmediately(...) somewhere in the Javadoc, but its use should be limited to special cases.
    Say on clicking a button, i want to draw rectangle with different sizes.See this article for an example that does exactly that, and proposes two approaches, both of them using repaint() (it's a coincidence, the article is about two methods to do custom painting, it turns out that the example topic is drawing rectangles).
    The article meantions the Swing tutorial chapter on [custom painting|http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html] , which explains the Swing painting architecture, and why you shouldn't try to circumvent it unless you really know what you do.
    How can i do it without calling repaint().Again in general there's no reason to avoid repaint(), just invoke it on the appropriate DrawPanel instance, not on the whole frame.

  • My repaint() method flickers

    Hi, can someone help me enhance my GUI so that it won't flicker? I tried to use BufferStrategy but it still flickers. I used the code below to override the repaint method of the Canvas that I am trying to draw. Also, I'm not really sure if the repaint() method was the right method to override.
    public void repaint() {
              super.repaint();
              this.createBufferStrategy(2);
              BufferStrategy bufferStrategy = this.getBufferStrategy();
              Graphics g = bufferStrategy.getDrawGraphics();
              g.setColor(Color.BLACK);
                    //x and y are changed by a different Thread every 1 millisecond
              g.drawOval(x, y, 20, 20);
              g.dispose();
              bufferStrategy.show();
         }I also have another Thread that repaints my Canvas.
    public class Painter implements Runnable {
         private LandAreaCanvas area;
         public Painter(LandAreaCanvas area) {
              this.area = area;
         public void run() {
              while (true) {
                   area.repaint();
    }So in summary, my application has 3 Threads running
    1. Main class with main method that initializes all GUI components
    2. Painter class that repaints forever
    3. Calculator class that changes the value of x and y in the repaint method of the Canvas class.
    Thanks a lot!

    Actually you should do your custom painting by overriding paintComponent(Graphics). Which should not flicker since Swing uses double buffering by default.
    See [the tutorial|http://java.sun.com/docs/books/tutorial/uiswing/painting/].
    On edit looks like you might be using AWT, so above advice might not be relevant. [The linked article|http://java.sun.com/products/jfc/tsc/articles/painting/] in the tutorial still can be of help though.
    Edited by: WalterLaan on May 7, 2009 2:13 AM

  • Can not refresh page after save properly(When not saving master record)

    I am using jdeveloper 11g R2 (11.1.2.3) JSF Facelet
    In some use case I have Address as master table and Person as detail table
    For some business reason I need to don't save same addresses
    eg:
    If +1 Test St+ is in database already and new user coming and adding this address with new person
    I need to use the row in database not creating a new address
    I do saving in doDML method of Address with some hashing algorithm and it is fine
    My problem is that I can not refresh page after save properly
    User coming to page think Adding a new address and a new person but in fact no new
    address added because of business I describe above
    Any ideas how I can implement this?
    Appreciate that
    Regards
    Mohsen

    Hi,
    from your description it is not clear why the page doesn't refresh. It could be a problem in your implementation code - who knows. What if you perform the address check on a command button that actually submits the new address? If the check returns true (address exists) you would call row.refresh(forget new row); and re-query the view object so the address coming from the database is displayed. If you wanted to use the doDML then yuou need to be aware that doDML doesn't help removing the row the user created. It just ignores the database update but the entity is still around, which in my suggested solution wont be the case.
    Frank

  • When I resume my laptop from sleep/hiberante, firefox is hung. It will prompt me with a dialog when I quit, so it is still running, but the page display is blank and will not refresh. I noticed this since about beta 7

    Firefox is running when my laptop comes out of system standby, but the page that was displaying when the laptop went into sleep mode is now a white canvas that does not refresh.
    The application is not hung, because I get prompted to save tabs when I quit, but for some reason, I can't prompt Firefox into refreshing the screen.
    I'm running Firefox on a Thinkpad T400 which has Intel 4 series Express integrated Graphics.

    This also happened if the network adapter is disabled then enabled. My computer is Windows 7 x64. Firefox needs to be killed from taskman before it will load a new instance of the application. I can also reproduce with all add-ons disabled.

  • Not Refresh Value After Add New Record used with RPC Component

    This is my code in the class Users.as
    package inthanous
    import mx.controls.Alert;
    import mx.rpc.http.HTTPService;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.events.FaultEvent;
    public class Users
    private var service:HTTPService;
    [Bindable]
    public var xmllist_user:XMLList;
    public function Users(){
    service = new HTTPService();
    service.method = "POST";
    service.useProxy = false
    service.resultFormat = "e4x";
    public function listUser():void{
    service.url = "/user/get_all_user_group_name";
    service.addEventListener("result", httpResultListUser);
    service.addEventListener("fault", httpFaultListUser);
    xmllist_user = new XMLList();
    service.send();
    private function httpResultListUser(event:ResultEvent):void{
    service.removeEventListener("result", httpResultListUser);
    service.removeEventListener("fault", httpFaultListUser);
    xmllist_user = new XMLList(service.lastResult.children());
    listAllUser();
    private function httpFaultListUser(event:FaultEvent):void{
    var faulstring:String = event.fault.message;
    service.removeEventListener("result", httpResultListUser);
    service.removeEventListener("fault", httpFaultListUser);
    Alert.show(faulstring,"Error");
    public function createUser(_xml:XML):void{
    service.url = "/user/create_user";
    service.addEventListener("result", httpResultCreateUser);
    service.addEventListener("fault", httpFaultCreateUser);
    service.send({firstName: _xml.firstName,
    lastName: _xml.lastName,
    gender: _xml.gender,
    login: _xml.login,
    pwd: _xml.pwd,
    dtBirth: _xml.dtBirth,
    telephone: _xml.telephone,
    idGroup: _xml.idGroup
    private function
    httpResultCreateUser(event:ResultEvent):void{
    service.removeEventListener("result", httpResultCreateUser);
    service.removeEventListener("fault", httpFaultCreateUser);
    listUser();
    clearUserDetail();
    private function httpFaultCreateUser(event:FaultEvent):void{
    var faulstring:String = event.fault.message;
    service.removeEventListener("result", httpResultCreateUser);
    service.removeEventListener("fault", httpFaultCreateUser);
    Alert.show(faulstring,"Error");
    This code i used with Ruby on Rail to connect with MySQL.
    When i used with FireFox browse after i create new user
    success it refresh the new record in Datagrid. But for the Internet
    Explorer Datagrid not refresh it because of it display the old
    recode before create.
    So i don't know it problem by Internet Explorer or my script.
    i hope someone can help me the solve this problem.
    thanks

    If you restrict the selection, a record value outside of that selection is not acceptable and will give you this error. This is how BPS works.
    You need to restrict on some other char so BASIC1 doesn't come in, but this value should be part of any selection on ZSEGMENT field for it to be accepted back.

Maybe you are looking for

  • Collection of multiple idocs

    can some clear me the message mapping posted in the blog by pooja pandey /people/pooja.pandey/blog/2005/07/27/idocs-multiple-types-collection-in-bpm i didn't get message mapping  done with idoc on sender side and what is on the other side? this is wa

  • GradientPaint under Java 1.0

    Hello all! I have problem with painting. I need to draw rectangle for example with smooth change of one color to another. In Java 2 I do it in such way: public void paint(Graphics g){     Graphics2D g2 = (Graphics2D)g;     GradientPaint p = new Gradi

  • CS4 Design Standard - Seriennummer ungültig nach Computerwechsel

    Hallo, ich habe 2010 CS4 Design Standard gekauft und dieses bei Adobe registriert. Nachdem ich mir nun ein neues Macbook Pro gekauft habe möchte ich CS4  auf dem neuen Mac installieren. Auf dem alten Computer habe ich CS4 bereits deinstalliert und di

  • Sys.dm_os_waiting_tasks and create index.

    Hi Team, Please let us know reason below why am getting blocking_session_id =87 and blocking_exec_context_id=1 while theres no spid=87 with exec_context_id=1. 2) Here we are watching IO_completion with no resource description. it is normal? session_i

  • Setting WS-Security Actor Element

    Hello, I am trying to write a client to a service secured with WS-Security. The service checks the Actor attribute in the SOAP header, and if that attribute is not found or is different from the set Actor, it ignores the message. So my question is ho