Need help making my images drag more smoothly

I'm trying to learn how to use the java2d api and I'm having a rough go of it.
Currently, the following code should populate a jframe's container with some jcomponent's called 'card' (which basically draw a given image as a texture over a specified rectangle). Then you should be able to drag them around. Sounds simple enough. I've finally gotten it to a point that's almost work-able, but there are two problems:
1) the last card added ignores it's location (via setBounds) until you start dragging it.
2) I'm not sure what kind of math is necessary in order to make dragging the entire JComponent a smooth process (Moving just the rectangle presents it's own weird oddities which I'll expound upon if you ask, but it is smooth).
Here's the code:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
public class test
        public static void main(String[]args)throws IOException
                String path1 = "card1.jpg";
                String path2 = "card2.jpg";
                String path3 = "card3.jpg";
                String path4 = "card4.jpg";
                card one = new card(path1, 40, 40);
                card two = new card(path2, 300, 300);
                card three = new card(path3, 50, 400);
                card four = new card(path4, 500, 100);
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.getContentPane().add(one);
                f.getContentPane().add(two);
                f.getContentPane().add(three);
                f.getContentPane().add(four);
                f.setSize(1000, 1000);
                f.setVisible(true);
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.*;
public class card extends JComponent implements MouseListener,
        MouseMotionListener
        BufferedImage image;
        Rectangle rect;
        double lastX;
        double lastY;
        double distX = 0;
        double distY = 0;
        int w = 205;
        int h = 280;
        public card(String path, int x, int y)throws IOException
                image = ImageIO.read(new File(path));
                setBounds(x, y, w, h);
                rect = new Rectangle(0, 0, w, h);
                lastX = x;
                lastY = y;
                addMouseListener(this);
                addMouseMotionListener(this);
        protected void paintComponent(Graphics g)
                super.paintComponent(g);
                g.drawImage(image, rect.x, rect.y, this);
        public void mouseClicked(MouseEvent e)
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e)
                if(rect.contains(e.getPoint()))
                        distX = e.getX() - lastX;
                        distY = e.getY() - lastY;
        public void mouseReleased(MouseEvent e) {}
        public void mouseDragged(MouseEvent e)
                Point p = e.getPoint();
                if(rect.contains(p))
                        lastX+=(e.getX() - lastX) - distX;
                        lastY+=(e.getY() - lastY) - distY;
                        this.setBounds((int)lastX, (int)lastY, w, h);
                        //rect.setLocation((int)lastX, (int)lastY);
                        repaint();
        public void mouseMoved(MouseEvent e)
                //if(rect.contains(e.getPoint()))
                        //System.out.println("inside");
}

Think about object-oriented programming (OOP) ideas. A Card can know about itself, things
like its color, suit, value. But it cannot know where it is on a card table without asking
the table (its parent). Like Newton's man_in_a_box illustration, it cannot know how to
orient or move in its outer environment. The table/parent component is the one who knows
where cards are and is therefore the logical one to have mouse code for moving them.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
public class CardDragTest implements MouseListener,
        MouseMotionListener
        CardDrag[] cards;
        CardDrag selectedCard;
        Point offset = new Point();
        boolean dragging = false;
        int selectedIndex = -1;
        public void mouseClicked(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e)
                Point p = e.getPoint();
                for(int j = 0; j < cards.length; j++)
                        Rectangle r = cards[j].getBounds();
                        if(r.contains(p))
                                offset.x = p.x - r.x;
                                offset.y = p.y - r.y;
                                selectedCard = cards[j];
                                dragging = true;
                                break;
        public void mouseReleased(MouseEvent e)
                dragging = false;
        public void mouseDragged(MouseEvent e)
                Point p = e.getPoint();
                if(dragging)
                        Rectangle r = selectedCard.getBounds();
                        int x = p.x - offset.x;
                        int y = p.y - offset.y;
                        selectedCard.setLocation(x, y);
                        selectedCard.repaint();
        // Use selectedIndex member variable to keep
        // this method from working too hard.
        public void mouseMoved(MouseEvent e)
                Point p = e.getPoint();
                boolean hovering = false;
                for(int j = 0; j < cards.length; j++)
                        Rectangle r = cards[j].getBounds();
                        if(r.contains(p))
                                hovering = true;
                                if(selectedIndex != j)
                                        System.out.println("selectedIndex = " + j);
                                        selectedIndex = j;
                                break;
                if(!hovering && selectedIndex != -1)
                     System.out.println("reset selectedIndex");
                     selectedIndex = -1;
        public static void main(String[]args) throws IOException
                CardDragTest test = new CardDragTest();
                String path1 = "playingCards/1.jpg";
                String path2 = "playingCards/2.jpg";
                String path3 = "playingCards/3.jpg";
                String path4 = "playingCards/4.jpg";
                CardDrag one = new CardDrag(path1, 40, 40);
                CardDrag two   = new CardDrag(path2, 300, 300);
                CardDrag three = new CardDrag(path3, 50, 400);
                CardDrag four  = new CardDrag(path4, 500, 100);
                test.cards = new CardDrag[] { one, two, three, four };
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Container cp = f.getContentPane();
                cp.addMouseListener(test);
                cp.addMouseMotionListener(test);
                cp.setLayout(null);
                cp.add(one);
                cp.add(two);
                cp.add(three);
                cp.add(four);
                f.setSize(600, 500);
                f.setVisible(true);
class CardDrag extends JComponent
        BufferedImage image;
        public CardDrag(String path, int x, int y)throws IOException
                image = ImageIO.read(new File(path));
                int w = image.getWidth();
                int h = image.getHeight();
                setBounds(x, y, w, h);
        protected void paintComponent(Graphics g)
                super.paintComponent(g);
                g.drawImage(image, 0, 0, this);
}

Similar Messages

  • Need help with getting images to look smooth (without the bitmap squares) around the edges. When I transfer the image from pictures, it sets itself into the InDesign layout, but with square edges. I need to find out how to get it to look smooth?

    Need to find out how to get my images transferred into an InDesign layout without the rough edges, as with a bit map image, but to appear with smooth edges in the layout. I can notice it more when I enlarge the file (pic). How can I get it to appear smooth in the finished layout. Another thing too that I noticed; it seems to have effected the other photos in the layout. They seem to be
    pixelated too after I import the illustration (hand drawn artwork...)? Any assistance with this issue will be greatly appreciated. Thanks in advance.

    No Clipboard, no copy & paste, as you would not get the full information of the image.
    When you paste you can't get the image info from the Links panel, but you can get resolution and color info either via the Preflight panel or by exporting to PDF and checking the image in Acrobat.
    Here I've pasted a 300ppi image, scaled it, and made a Preflight rule that catches any image under 1200ppi. The panel gives me the effective resolution of the pasted image as 556ppi. There are other workflow reasons not to paste—you loose the ability to easily edit the original and large file sizes—but pasting wouldn't cause a loss in effective resolution or change in color mode.

  • I need help making Adobe Edge animation appear correctly on iphones, ipads and android phones.

    I need help making Adobe Edge animation appear correctly on iphones, ipads and android phones. It currently looks fine on desktops and androids. I am using wordpress with a responsive theme (Canvas). I will need you to document The url is http://adamhtc.org.s183459.gridserver.com.

    Thanks George, interesting thought.  I looked on Adobe's site and they "advertise" fillable forms for the iPhone and Android markets, but on the Windows Phone tab, that is mysteriously missing.  lol    Maybe it will come later?   Meanwhile, I'll google to see if there are any PDF viewers that can handle it now.   Thanks for the reply.  :-)

  • My grandma is a new apple user and she needs help making an apple account.

    my grandma is a new apple user and she needs help making an apple account.

    She should call Apple support or visit the Genius Bar at an Apple store (make an appointment first at http://apple.com/retail). They will walk her through the process.

  • Need help with my image filter

    hi guys,
    so i'm making this image filter for school in Labview but can't get it to work properly, to do the filtering i'm using a formula node, which in my eyes is easier then with only labview functions.
    for the C code i'm following this website: http://lodev.org/cgtutor/filtering.html
    i don't copy exact every line, i'm only copying the lines i need. note that i don't use the "ColorRGB" class because it doesn't exist in a formula node, i do the filtering on a black and white image so don't really need it.
    I adjusted to code so that it would work in my formula node.
    if i run the vi and select the attached image file (can't attach .bmp files so i included a link for the img file) for input then it just returns the original image, which is good and also bad, good because the code works in some way but bad because it doesn't do any filtering or such.
    Could anyone please look into this and give me some tips or tell me what i'm doing wrong?
    and if anyone knows how to do this in RGB you are always welcome to give me tips.  
    used image file: http://www13.zippyshare.com/v/74810991/file.html  (can't attach bmp files so i uploaded it quickly)
    (btw i know there is this toolkit called vision which has many functions that could help me, but the teacher already said we can't use that)
    i hope somebody can assist me in this and willing to give me some help.
    Grtz Stino
    Attachments:
    filter.vi ‏22 KB

    Darin.K wrote:
    Yes there are two bugs, I found the other one first but figured if you fixed the result the other would be obvious.  This is homework so only a hint:
    look at what happens (and does not happen) to pixel. 
    the first bug was that i had to use the 'result[][]' array instead of the 'image[][]' array in my last loop, right?
    the 2nd bug I really can't find :s been lookin at it for almost an hour now and trying new stuff but nothing works, 
    first i thought i had to put this line " result[x][y] = min(max(int((factor2 * pixel) + bias2), 0), 255);"  inside the for loop above but that didn't fix my problem,
    maybe the problem is in my 'imageX' and 'imageY' variable, i don't know? any more tips?
    I'm sorry for being such a newb but programming isn't my strongest quality.
    cedhoc wrote:
    Just one more advice:
    Look at the format of the "image" array. The way how to use the values from this array depends on the "image depth" parameter. 
    In your case, because the image is 8bit, you need to use the "colors" array containing the real RGB value.
    Look at the Help for the "Read BMP File VI", you should be able to properly handle your pixels from there.
     thanks for pointing that out for me, so I connect the 'totalpix' array with the 'colors' array from the image data instead of the 'image' array, that's correct right?

  • Need help finding moved image files

    How would I find files after they have been moved? I travel and use a MB Pro laptop. The workflow I'm using is to download images to my desktop, review, rate and add keywords immediately. I make 2 backups, 1 to portable data store hard drive and one to DVD. Then every few days I erase the desktop image files. When I arrive home I download the entire trip's images from the portable storage to my desktop drives (2 500Gb SATA drives).
    Is there an easy way to direct Aperture to look for the files in the new location? Or, failing that, is there a better way to work? I regularly have 40 - 60 Gb of images after a trip and the laptop hard drive is inadequate for the task.

    The question isn't really clear to me yet. If you know what "the new location" is, then it's easy to make Aperture point to it. But that may not be the question. I think you may need to describe your workflow in more detail.
    You don't say how to review etc images on the MBP. If you're using Aperture, it must be with a library. Are you using Managed images there? So is the problem how to transfer data -- images and edits and metadata -- from the library on the MBP to the library (with referenced images??) on the desktop?
    Synchronizing libraries is not something Apple makes easy or offers any real help with. The best way to do it turns out to be to export one project at a time, connect to the other machine and its library, and import the projects. (In the process you might also Relocate images to make them referenced.)
    But your note about the laptop drive being to small is confusing. I don't see where your images are when you're on the road.

  • Need Help making a Screencast for IPHONE

    Hello there
    I need some serious help making a screencast for a client - for it's Iphone Apps -
    something similare to this
    http://www.newsluxe.com/chaumet-et-iphone.php
    but more sexy, with a animated background and a different type of cursor.
    Anyideas ?
    I really don't know where to start - I found leads however :
    Camtasia Studio , screenflow, ,
    Maybe you could help me filling the gaps.
    Thanks for your help !

    does anyone know how apple made these forums?
    I think they use Jive:
    http://www.jivesoftware.com/products/forums/
    The Apple way for users to add photos is the .Mac web gallery:
    http://www.apple.com/ilife/iphoto/#webgallery

  • Need Help to Draw and Drag Triangle - URGENT

    Hi everyone - I am developing various proofs of the pythagora's theorem
    and the following code draws a triangle on screen and the proof follows -
    but i need to know how to drag the triangle such tht 1 angle is always set to 90 degrees.
    i.e. i need to resize the triangle by dragging its vertex points by which the1 angle remains at 90 no matter what the size.
    The proof has got some graphics code hardcoded in it - i.e. LINES AND POLYGONS have been hardcoded
    i need to reconfigure that such that everytime the user increases the size of the triagnle and clicks on next it draws the lines and polygons in the correct area and place
    PLEASE HELP
    the code is as follows
    MAIN CLASS
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.*;
    import java.awt.event.*;
    import java.text.*;
    import javax.swing.*;
    public class TestProof {
        TestControl control;          // the controls for the visual proof
        TestView view;          // the drawing area to display proof
        // called upon class creation
        public TestProof() {
            view = new TestView();
    view.setBackground(Color.WHITE);
            control = new TestControl(view);
            Frame f = new Frame("Pythagoras");
            f.add(view,"Center");
            f.add(control,"South");
            f.setSize(600,600);
            f.setBackground(Color.lightGray);
            f.addMouseMotionListener(
            new MouseMotionListener() { //anonymous inner class
                //handle mouse drag event
                public void mouseMoved(MouseEvent e) {
                    System.out.println("Mouse  " + e.getX() +","  + e.getY());
                public void mouseDragged(MouseEvent e) {
                    System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
            JMenu File = new JMenu("File");
            JMenuItem Exit = new JMenuItem("Exit");
            Exit.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    ExitActionPerformed(evt);
            JMenuBar menuBar = new JMenuBar();
            menuBar.add(File);
       File.add(Exit);
            f.add(menuBar,"North");
            f.show();
        private JMenuBar getMenuBar() {
            JMenu File = new JMenu("File");
            JMenuItem Exit = new JMenuItem("Exit");
            Exit.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    ExitActionPerformed(evt);
            JMenuBar menuBar = new JMenuBar();
            menuBar.add(File);
                 File.add(Exit);   
            return menuBar;
        private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
            // TODO add your handling code here:
            System.exit(0);
        // for standalone use
        public static void main(String args[]) {
      TestProof TP = new TestProof();
    }Test VIEW
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.text.*;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    public class TestView extends Canvas {
        int TRANSLUCENT = 1;
        int sequence;          // sequencer that determines what should be drawn
        // notes matter
        int noteX = 100;     // note coordinates
        int noteY = 60;
        int fontSize = 11;     // font size
        int lineSpacing     // space between two consecutive lines
        = fontSize + 2;
        Font noteFaceFont;     // font used to display notes
        // objects matter
        Polygon tri;          // right-angled triangle with sides A, B, and C
        Polygon tri1;
        Polygon sqrA;          // square with side of length A
        Polygon sqrB;          // square with side of length B
        Polygon sqrC;          // square with side of length C
        Polygon parA;          // parallelogram of base A and height A
        Polygon parB;          // parallelogram of base B and height B
        Polygon poly1;
        Polygon poly2;
        Polygon poly3;
        Polygon poly4;
        Polygon poly5;
        Polygon poly6;
        int X0 = 350;          // coordinates of triangle
        int Y0 = 350;
        int A = 90;//60;          // triangle size
        int B = 120;//80;
        int C = 150;//100;
        //CORDS of 2nd triangle
        int X1 = 350;
        int Y1 = 500;
        // notes: three lines per note
        String notes[] = {
            // note 0
            // note 1
            // note 2
            // note 3
            // note 4
            // note 5
            // note 6
            // note 7
            // note 8
            // note 9
            // note 10
            // note 11
            // note 12
            // note 13
            // note 14
        // constructor
        public TestView() {
            addMouseMotionListener(
            new MouseMotionListener() { //anonymous inner class
                //handle mouse drag event
                public void mouseMoved(MouseEvent e) {
                    System.out.println("Mouse  " + e.getX() +","  + e.getY());
                public void mouseDragged(MouseEvent e) {
                    System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
            // set font
            noteFaceFont = new Font("TimesRoman", Font.PLAIN, fontSize);
            // (coordinates specified w.r.t. to P0, unless otherwise specified)
            // create the triangle
            tri = new Polygon();
            tri.addPoint(0, 0);                    // add P0 coordinate
            tri.addPoint(A*A/C, -A*B/C);          // add A3 coordinate
            tri.addPoint(C, 0);                    // add C1 coordinate
            tri.translate(X0, Y0);               // place triangle
            tri1 = new Polygon();
            tri1.addPoint(0,0);                    // add P0 coordinate
            tri1.addPoint(A*A/C +38, +A*B/C);          // add A3 coordinate
            tri1.addPoint(C, 0);                    // add C1 coordinate
            tri1.translate(X1, Y1);
            // create square of side A
            sqrA = new Polygon();
            sqrA.addPoint(0, 0);               // add P0 coordinate
            sqrA.addPoint(-A*B/C, -A*A/C);          // add A1 coordinate
            sqrA.addPoint(-A*(B-A)/C, -A*(A+B)/C);     // add A2 coordinate
            sqrA.addPoint(A*A/C, -A*B/C);          // add A3 coordinate
            sqrA.translate(X0, Y0);               // place square
            // create square of side B
            // warning: the coordinate of this object are specified relative to C1
            sqrB = new Polygon();
            sqrB.addPoint(0, 0);               // add C1 coordinate
            sqrB.addPoint(B*A/C, -B*B/C);          // add B1 coordinate
            sqrB.addPoint(B*(A-B)/C, -B*(A+B)/C);     // add B2 coordinate
            sqrB.addPoint(-B*B/C, -B*A/C);          // add A3 coordinate
            sqrB.translate(X0 + C, Y0);               // place square
            // create square of side C
            sqrC = new Polygon();
            sqrC.addPoint(0, 0);               // add P0 coordinate
            sqrC.addPoint(C, 0);               // add C1 coordinate
            sqrC.addPoint(C, C);               // add C2 coordinate
            sqrC.addPoint(0, C);               // add C3 coordinate
            sqrC.translate(X0, Y0);               // place square
            poly1 = new Polygon();
            poly1.addPoint(405,279);
            poly1.addPoint(413,350);
            poly1.addPoint(432,500);
            poly1.addPoint(442,571);
            poly1.addPoint(500,500);
            poly1.addPoint(500,350);
            poly2 = new Polygon();
            poly2.addPoint(279,297);
            poly2.addPoint(404,280);
            poly2.addPoint(571,254);
            poly2.addPoint(500,350);
            poly2.addPoint(350,350);
            //Polygon 3
            poly3 = new Polygon();
            poly3.addPoint(404,280);
            poly3.addPoint(350,350);
            poly3.addPoint(414,350);
            poly4 = new Polygon();
            poly4.addPoint(350,350);
            poly4.addPoint(350,500);
            poly4.addPoint(442,572);
            poly4.addPoint(433,500);
            poly4.addPoint(414,350);
            poly5 = new Polygon();
            poly5.addPoint(476,183);
            poly5.addPoint(332,225);
            poly5.addPoint(278,295);
            poly5.addPoint(404,279);
            poly5.addPoint(571,254);
            poly6= new Polygon();
            poly6.addPoint(405,278);
            poly6.addPoint(332,224);
            poly6.addPoint(476,182);
            // create parallelogram of height A
            parA = new Polygon();
            parA.addPoint(0, 0);               // add P0 coordinate
            parA.addPoint(0, C);               // add C3 coordinate
            parA.addPoint(A*A/C, C - A*B/C);          // add Q0 coordinate
            parA.addPoint(A*A/C, -A*B/C);          // add A3 coordinate
            parA.translate(X0,Y0);               // place parallelogram
            // create parallelogram of height B
            // warning: the coordinate of this object are specified from C1
            parB = new Polygon();
            parB.addPoint(0, 0);               // add C1 coordinate
            parB.addPoint(-B*B/C, -B*A/C);          // add A3 coordinate
            parB.addPoint(A*A/C - C, C - A*B/C);     // add Q0 coordinate
            parB.addPoint(0, C);               // add C2 coordinate
            parB.translate(X0 + C, Y0);
            // place parallelogram
        // depending on the sequence number we draw certain objects
        public void paint(Graphics gfx) {
            super.paint(gfx);
            Graphics2D g = (Graphics2D) gfx;
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
            // text first, then objects (and animation)
            // we always output some notes
            g.drawString(notes[3*sequence], noteX, noteY);
            g.drawString(notes[3*sequence + 1], noteX, noteY + lineSpacing);
            g.drawString(notes[3*sequence + 2], noteX, noteY + 2*lineSpacing);
            // the object are drawn in an order so that they are properly overlapped
            if(sequence == 13) {
                g.setColor(Color.green);
                g.fillPolygon(poly1);
                g.fillPolygon(poly2);
                g.fillPolygon(poly3);
                g.fillPolygon(poly4);
                g.fillPolygon(poly5);
                g.setColor(Color.RED);
                g.setColor(Color.GREEN);
                g.drawLine(413,351,433,499);
                g.setColor(Color.white);
                g.fillPolygon(tri);
                g.fillPolygon(tri1);
                g.fillPolygon(poly6);
            if(sequence == 12 ) {
                g.setColor(Color.green);
                g.fillPolygon(poly1);
                g.fillPolygon(poly2);
                g.fillPolygon(poly3);
                g.fillPolygon(poly4);
                g.fillPolygon(poly5);
                g.setColor(Color.BLACK);
            if(sequence == 11){
                g.setColor(Color.green);
                g.fillPolygon(poly1);
                g.fillPolygon(poly3);
                g.fillPolygon(poly4);
                g.setColor(Color.BLACK);
            if(sequence == 8 ){
                g.setColor(Color.green);
                g.fillPolygon(poly5);
                g.setColor(Color.MAGENTA);
                g.drawString("E",578,254);
                g.drawString("D",268,302);
                g.setColor(Color.black);
                g.drawArc(250,150,350,250,320,65);
            else if (sequence == 9 ){
                g.setColor(Color.green);
                g.fillPolygon(poly2);
                g.setColor(Color.MAGENTA);
                g.drawString("E",578,254);
                g.drawString("D",268,302);
                g.setColor(Color.black);
                g.drawArc(250,150,350,250,320,65);
            if( sequence == 10){
                g.setColor(Color.green);
                g.fillPolygon(poly2);
                g.fillPolygon(poly5);
                g.setColor(Color.black);
                g.setColor(Color.MAGENTA);
                g.drawString("E",578,254);
                g.drawString("D",268,302);
                g.setColor(Color.black);
                g.drawArc(250,150,350,250,320,65);
            if(sequence == 7){
                g.setColor(Color.green);
                g.fillPolygon(poly2);
                g.setColor(Color.MAGENTA);
                g.drawString("E",578,254);
                g.drawString("D",268,302);
                g.setColor(Color.black);
            if(sequence == 6){
                g.setColor(Color.yellow);
                g.fillPolygon(poly2);
                g.setColor(Color.green);
                g.fillPolygon(poly3);
                g.setColor(Color.blue);
                g.fillPolygon(poly4);
                g.setColor(Color.black);
                g.drawArc(250,175,350,275,300,65);
                //g.drawArc(250,150,350,250,320,65);
                g.drawLine( 606,309,599,299);
                g.drawLine(592,313, 599,299);
                g.drawString("+90 degrees",605,378);
            if (sequence == 5 ) {
                g.setColor(Color.yellow);
                g.fillPolygon(poly2);
                g.setColor(Color.black);
            if (sequence == 4) {
                g.setColor(Color.YELLOW);
                g.fillPolygon(poly1);
                g.setColor(Color.black);
                g.drawArc(319,310,250,195,89,-35);
                g.drawLine(499,319, 492,312);
                g.drawLine(499,319, 492,325);
                g.drawArc(200,180, 233,238,-120,-60);
                g.drawLine(200,298, 208,309);
                g.drawLine(200,298, 194,313);
                g.drawString("-90 degrees",227,347);
            if (sequence >= 3) {
                g.drawLine(404,279,442,572);
            // draw the squares
            if (sequence >= 2) {
                g.drawLine(278,296,572,254);
            // draw the squares
            if (sequence >= 1) {
                g.drawLine(333,224,476,182);
                g.drawPolygon(tri1);
            // always draw the triangle
            g.drawPolygon(tri);
            g.drawPolygon(sqrA);
            g.drawPolygon(sqrB);
            g.drawPolygon(sqrC);
            g.setColor(Color.MAGENTA);
            g.drawString("C", X0 + C/2 - fontSize/2, Y0 + lineSpacing);
            g.drawString("A",
            X0 + A*A/(2*C) - fontSize*A/B/2,
            Y0 - A*B/(2*C) - lineSpacing*A/B);
            g.drawString("B",
            X0 + C - B*B/(2*C) - fontSize*A/B/2,// the last "-" isn't log.
            Y0 - B*A/(2*C) - lineSpacing*A/B);
        public void redraw(int sequence) {
            this.sequence = sequence;
            repaint();
    }TEST CONTROL
    * TestControl.java
    * Created on 28 February 2005, 11:16
    import java.awt.*;
    import java.awt.event.*;
    import java.text.*;
    import javax.swing.JFrame;
    * @author  Kripa Bhojwani
    public class TestControl extends Panel implements ActionListener {
      TestView view;
      int sequence;                    // event sequence
      // constructor
      public TestControl(TestView view) {
        Button b = null;
        Label label = new Label("A^2 ");
        this.view = view;          // initialize drawble area
        sequence = 0;               // initialize sequence
        b = new Button("Prev");
        b.addActionListener(this);
        add(b);
        b = new Button("Next");
        b.addActionListener(this);
        add(b);
        add(label);
      // exported method
      public void actionPerformed(ActionEvent ev) {
        String label = ev.getActionCommand();
        if (label.equals("Prev")) {
          if (sequence >0) {
         --sequence;
        else {
          if (sequence < 15) {
         ++sequence;
        this.setEnabled(false);          // disable the controls
        view.redraw(sequence);
        this.setEnabled(true);          // enable the controls
    }Please help --- really need to sort this out...
    THANKS

    One of the problems you face is that it is hard to recognise which parts of your code are drawing the triangle. This is because you are writing code in a procedural way rather than an object oriented way.
    In object oriented code you would have a triangle object that could draw itself. You would create the triangle object by specifying its sizes and angles in some way. Then it should be easy to change the triangles sizes and angles and ask all the drawn objects to redraw themselves.

  • I need help dividing an image into two equal parts in Adobe Illustrator CC--ASAP!!!

    I need help dividing a single, already created image into 2 equal parts...Am getting nowhere so far

    Hi Willi, thanks so much for responding! Below is the image I need to divide in half. The left half where it says "Click here for the definition" links to a landing page where people can read the definition of the Hebrew Word. The right half links to an audio recording of the Hebrew word being spoken aloud. I am trying to figure out how to use the scissors or knife tool in Adobe Illustrator and am having no luck. Plus I believe there's a way to include URLs on each separated part, but I can't get past figuring out how to cut it. My background is not graphic design

  • Need help [JS]: select images/captions in InD, switch to Bridge and write to XMP

    I've got a javascript for CS3/Tiger that I'm writing that eventually will let a user select an image and a caption in InDesign, then tells bridge to write the caption data into the image metadata. I need help - the script works in pieces, but not when put together.
    It's built as an indesign script, then follows the procedure to create a script object to send to bridge. When it runs, the indesign portion works fine, but nothing happens in bridge.
    The script is below, with comments.
    Can someone help!? Thanks.
    // This is the InDesign portion of the script, which was tested separately and is working fine. Right now, for testing purposes, the data from this portion isn't even used by the later Bridge portion but once I get the bridge part together, it will use those variables.
    #target "indesign-5.0"
    var myObjectList = new Array;
    //Script does nothing if no documents are open or if no objects are selected.
    if(app.documents.length != 0){
    if(app.selection.length != 0){
    for(myCounter = 0; myCounter < app.selection.length; myCounter ++){
    switch(app.selection[myCounter].constructor.name){
    case "TextFrame":
    var myCaption = app.selection[myCounter].contents;
    $.writeln(myCaption);
    break;
    default:
    var myLink = app.selection[myCounter].graphics[0].itemLink.filePath;
    $.writeln(myLink);
    // here's where I create the string of the script to send to Bridge.
    // the script itself is almost completely a lifted from the SnpModifyMetadta sample from the Bridge sdk
    // it basically finds a certain image file and modifies the description metatata. i hardcoded the caption text and image path just for testing- eventually i would like it to use the variables from indesign.
    // this script works fine as-is when run in the original Bridge scripting context.
    // the method here of concatenating and sending the myScript string works fine when i use a different (smaller) script. so i can't tell why it's not working!?
    var myScript = "function SnpModifyMetadata()";
    myScript += "{";
    myScript += " this.requiredContext = \"Needs to run in Bridge, \nwith a selection of a file, \nideally with some metadata\";";
    myScript += "}";
    myScript += "SnpModifyMetadata.prototype.run = function()";
    myScript += "{";
    myScript += " if(!this.canRun())";
    myScript += " {";
    myScript += " return false;";
    myScript += " }";
    myScript += " if( xmpLib == undefined )";
    myScript += " {";
    myScript += " if( Folder.fs == \"Windows\" )";
    myScript += " {";
    myScript += " var pathToLib = Folder.startup.fsName + \"/AdobeXMPScript.dll\";";
    myScript += " }";
    myScript += " else";
    myScript += " {";
    myScript += " var pathToLib = Folder.startup.fsName + \"/AdobeXMPScript.framework\";";
    myScript += " }";
    myScript += " var libfile = new File( pathToLib );";
    myScript += " var xmpLib = new ExternalObject(\"lib:\" + pathToLib );";
    myScript += " }";
    myScript += " $.writeln(\"About to run SnpModifyXML\");";
    myScript += " var thumb = new Thumbnail(Folder(\"/Macintosh HD/Users/hearstuser/Desktop/BridgeScriptImages/orion_stack copy 6.psd\"));";
    myScript += " if(thumb.hasMetadata)";
    myScript += " {";
    myScript += " var md = thumb.synchronousMetadata;";
    myScript += " var xmp = new XMPMeta(md.serialize());";
    myScript += " $.writeln(\"SnpModifyXML: About to modify XMP data for \" + thumb.name);";
    myScript += " $.writeln(\"XMP packet before modifications:\");";
    myScript += " $.writeln(\"-------------------------------------------------\");";
    myScript += " $.writeln(xmp.dumpObject());";
    myScript += " xmp.deleteProperty(XMPConst.NS_XMP, \"Description\");";
    myScript += " xmp.setProperty(XMPConst.NS_XMP, \"Description\", \"hoThereHeyThere\");";
    myScript += " var d = new XMPDateTime(new Date());";
    myScript += " d.convertToLocalTime();";
    myScript += " xmp.setProperty(XMPConst.NS_XMP, \"ModifyDate\", d, XMPConst.XMPDATE);";
    myScript += " $.writeln(\"XMP packet af

    Recently I received an e-mail from a user asking me to remake the script I had posted here a while ago.
    I rechecked my previous post and found a couple of serious mistakes. So I revised it according to what he asked. Each page in his InDesign document contains one image and one text frame with description.
    At start the script checks the selection. If nothing is selected it processes all pages in the document. In case two objects are selected – it checks whether one of them text frame and the other a rectangle and if the rectangle contains an image, then it reads the contents of the text frame, replacing hard and soft returns with spaces and writes this text to the corresponding image’s description field.
    In the end, it updates all links and saves the file.
    The script works both on Mac and PC, assuming that CS3 installed in the default location so long as it depends on libraries:
    /C/Program Files/Adobe/Adobe Bridge CS3/AdobeXMPScript.dll (on PC)
    /Applications/Adobe Bridge CS3/Bridge CS3.app/Contents/MacOS/AdobeXMPScript.framework (on MAC)
    So, if necessary, correct these lines.
    Here is my script in case somebody is interested:
    #target indesign
    var myDoc = app.activeDocument;
    var mySelection = app.selection;
    if (mySelection.length == 0) {
        ProcessPages();
    else if (mySelection.length == 1) {
        alert("One image and one textframe should be selected.");
        exit();   
    else if (mySelection.length == 2) {
        try {
            if (mySelection[0].constructor.name == "TextFrame" && mySelection[1].images.length == 1) {
                var myTextFrame = mySelection[0];
                var myImage = mySelection[1].images[0];
                var myCaption = ReplaceReturnWithSpace(myTextFrame.contents);
                var myPath = new File(myImage.itemLink.filePath).absoluteURI;
            else if (mySelection[1].constructor.name == "TextFrame" && mySelection[0].images.length == 1) {
                var myTextFrame = mySelection[1];
                var myImage = mySelection[0].images[0];
                var myCaption = ReplaceReturnWithSpace(myTextFrame.contents);
                var myPath = new File(myImage.itemLink.filePath).absoluteURI;
        catch(e) {
            alert("Something wrong with your selection.\nError: " + e.message);
            exit();
        CreateBridgeTalkMessage(myCaption, myPath);
    else if (mySelection.length > 2) {
        alert("One image and one textframe should be selected.");
        exit();
    UpdateAllOutdatedLinks();
    myDoc.save();
    alert("All done.");
    //+++++++++++++++++++ FUNCTIONS ++++++++++++++++++++++
    function CreateBridgeTalkMessage(myCaption, myPath) {
        var bt = new BridgeTalk();
        bt.target = "bridge";
        var myScript = WriteCaption.toString() + '\r';
        myScript += 'WriteCaption(\"' + myCaption + '\", \"' + myPath + '\");';
        bt.body = myScript;
        bt.send();
    function WriteCaption(myCaption, myPath) {
        if( xmpLib == undefined ) {
            if( Folder.fs == "Windows") {
                var pathToLib = "/C/Program Files/Adobe/Adobe Bridge CS3/AdobeXMPScript.dll";
            else {
                var pathToLib = "/Applications/Adobe Bridge CS3/Bridge CS3.app/Contents/MacOS/AdobeXMPScript.framework";
            var libfile = new File( pathToLib );
            var xmpLib = new ExternalObject("lib:" + pathToLib );
        var thumb = new Thumbnail (File (myPath));
        if (thumb.hasMetadata) {
            var md = thumb.synchronousMetadata;
            var xmp = new XMPMeta(md.serialize());
            xmp.deleteProperty(XMPConst.NS_XMP, "Description");
            xmp.setProperty(XMPConst.NS_XMP, "Description", myCaption);
            var updatedPacket = xmp.serialize(XMPConst.SERIALIZE_OMIT_PACKET_WRAPPER | XMPConst.SERIALIZE_USE_COMPACT_FORMAT);
            thumb.metadata = new Metadata(updatedPacket);
    function ProcessPages() {
        var myPages = myDoc.pages;
        for (i = 0; i < myPages.length; i++) {
            var myPage = myPages[i];
            if (myPage.textFrames.length == 1 && myPage.rectangles.length == 1) {
                if (myPage.rectangles[0].graphics.length == 1) {
                var a = myPage.rectangles[0];
                    var myImage = myPage.rectangles[0].graphics[0];
                    var myPath = new File(myImage.itemLink.filePath).absoluteURI;
                    var myTextFrame = myPage.textFrames[0];
                    var myCaption = ReplaceReturnWithSpace(myTextFrame.contents);
                    CreateBridgeTalkMessage(myCaption, myPath);
    function ReplaceReturnWithSpace(myString) {
        myString = myString.replace( /\n/g , " " );
        myString = myString.replace( /\r/g , " " );
        return myString;
    function UpdateAllOutdatedLinks() {
        for(var myCounter = myDoc.links.length-1; myCounter >= 0; myCounter--){
            var myLink = myDoc.links[myCounter];
            if (myLink.status == LinkStatus.linkOutOfDate){
                myLink.update();
    If somebody interested in developing this script further, do not hesitate to post here your feedback.
    Kasyan

  • Need help deleting an image field/pictures in worksheet

    I am in need of help!!! Added photos in an important .pdf document (a worksheet form that was pre-made) and I added image fields (Top box photo and small bottom box for text). I need to delete some image fields now and it won't let me. I upgraded my Adobe Reader to Acrobat XI Pro trial, still can't. If I try to edit image, it says I need to have Live Cycle designer to edit this form. Someone please help! This is my son's Eagle Scout worksheet and needs to be fixed tonight....please

    If the file was created in LiveCycle Designer then it can only be edited
    there.
    It's not clear in what way you edited it originally.

  • I need help making a square that scans across a screen.

    i'm trying to make a program that creates images of a square scanning across a black background.  so far all i have is a program that makes one image where i can alter the size of the square and its position.  I'm very very new to labview and i need help with the structure that would create all the images of the square scanning across and then shift down and scan across again.
    thank you very much,
    Joseph Sadler
    Attachments:
    Drawexample.vi ‏24 KB

    As Lynn found, there is a memory problem with the vi which didn't show up in my limited testing.
    Using Shift Registers with Picture Controls can cause problems.
    See this thread.
    Try the attached "mod" version.
    Then I got to thinking, why redraw the box (2x with "erase") - when you could just move a box around?
    (Note: I used a picture for the box, but you could use other objects.)
    The "mod1" version does it this way.
    steve
    Help the forum when you get help. Click the "Solution?" icon on the reply that answers your
    question. Give "Kudos" to replies that help.
    Attachments:
    squarescan mod.vi ‏20 KB
    squarescan mod 1.vi ‏20 KB

  • Need help to find image size box

    I am a novice, I need to find the image size box on illistrator but not able to so please explaine how to find it on the page.  Thanks

    You may also be talking about the "Info" window. To open it, go to Window > Info or hit command+F8. It will show you the dimensions of the bounding box containing whatever object you have selected.
    Please let us know if we can help you further.

  • Need help with Applet: Images

    DUKESTARS HERE, YOU KNOW YOU WANNA
    Hi,
    I'm designing an applet for some extra credit and I need help.
    This game that i have designed is called "Digit Place Game", but there is no need for me to explain the rules.
    The problem is with images.
    When I start the game using 'appletviewer', it goes to the main menu:
    http://img243.imageshack.us/img243/946/menuhy0.png
    Which is all good.
    But I decided that when you hover your cursor over one of the options such as: Two-Digits or Three-Digits, that the words that are hovered on turn green.
    http://img131.imageshack.us/img131/6231/select1ch3.png
    So i use the mouseMoved(MouseEvent e) from awt.event;
    The problem is that when i move the mouse around the applet has thick line blotches of gray/silver demonstrated below (note: these are not exact because my print screen doesn't take a picture of the blotches)
    http://img395.imageshack.us/img395/4974/annoyingmt1.png
    It also lags a little bit.
    I have 4 images in my image folder that's in the folder of the source code
    The first one has all text blue. The second one has the first option, Two-Digits green but rest blue. The third one has the second option, Three-Digits green but rest blue, etc.
    this is my code
    import java.applet.Applet;
    import java.awt.Graphics;
    import java.awt.event.*;
    import java.awt.*;
    public class DigitPlaceGame extends Applet implements MouseListener, MouseMotionListener {
         public boolean load = false;
         public boolean showStartUp = false;
         public boolean[] hoverButton = new boolean[3];
         Image load1;
         Image showStartUp1;
         Image showStartUp2;
         Image showStartUp3;
         Image showStartUp4;
         public void init() {
              load = true;
              this.resize(501, 501);
                   try {
                        load1 = getImage(getCodeBase(), "images/load1.gif");
                        repaint();
                   } catch (Exception e) {}
              load();
         public void start() {
         public void stop() {
         public void destroy() {
         public void paint(Graphics g) {
              if(load == true) {
                   g.drawImage(load1, 0, 0, null, this);
              } else if(showStartUp == true) {
                   if(hoverButton[0] == true) {
                        g.drawImage(showStartUp2, 0, 0, null, this);
                   } else if(hoverButton[1] == true) {
                        g.drawImage(showStartUp3, 0, 0, null, this);
                   } else if(hoverButton[2] == true) {
                        g.drawImage(showStartUp4, 0, 0, null, this);
                   } else {
                        g.drawImage(showStartUp1, 0, 0, null, this);
                        for(int i = 0; i < 3; i++) {
                             hoverButton[i] = false;
         public void load() {
              addMouseListener(this);
              addMouseMotionListener(this);
              showStartUp1 = getImage(getCodeBase(), "images/showStartUp1.gif");
              showStartUp2 = getImage(getCodeBase(), "images/showStartUp2.gif");
              showStartUp3 = getImage(getCodeBase(), "images/showStartUp3.gif");
              showStartUp4 = getImage(getCodeBase(), "images/showStartUp4.gif");
              showStartUp();
         public void showStartUp() {
              load = false;
              showStartUp = true;
         public void mouseClicked(MouseEvent e) {
              System.out.println("test");
         public void mouseMoved(MouseEvent e) {
              int x = e.getX();
              int y = e.getY();
              if(x >= 175 && x <= 330 && y >= 200 && y <= 235) {
                   hoverButton[0] = true;
                   repaint();
              } else if(x >= 175 && x <= 330 && y >= 250 && y <= 280) {
                   hoverButton[1] = true;
                   repaint();
              } else if(x >= 175 && x <= 330 && y >= 305 && y <= 335) {
                   hoverButton[2] = true;
                   repaint();
              } else {
                        for(int i = 0; i < 3; i++) {
                             hoverButton[i] = false;
                        repaint();
         public void mouseEntered(MouseEvent e) {
         public void mouseExited(MouseEvent e) {
         public void mousePressed(MouseEvent e) {
         public void mouseReleased(MouseEvent e) {
         public void mouseDragged(MouseEvent e) {
    }plox help me ploz, i need the extra credit for an A
    can you help me demolish the lag and stop the screen from flickering? thanks!!!!!
    BTW THIS IS EXTRA CREDIT NOT HOMework
    DUKESTARS HERE, YOU KNOW YOU WANNA
    Edited by: snoy on Nov 7, 2008 10:51 PM
    Edited by: snoy on Nov 7, 2008 10:53 PM

    Oh yes, I knew there could be some problem.......
    Now try this:
    boolean a,b,c;
    if((a=(x >= 175 && x <= 330 && y >= 200 && y <= 235)) && !hoverButton[0]) {
                   hoverButton[0] = true;
                   repaint();
              } else if((b=(x >= 175 && x <= 330 && y >= 250 && y <= 280)) && !hoverButton[1]) {
                   hoverButton[1] = true;
                   repaint();
              } else if((c=(x >= 175 && x <= 330 && y >= 305 && y <= 335)) && !hoverButton[2]) {
                   hoverButton[2] = true;
                   repaint();
              } else if ((!a && !b && !c)&&(hoverButton[0] || hoverButton[1] || hoverButton[2]){
                        for(int i = 0; i < 3; i++) {
                             hoverButton[i] = false;
                        repaint();
              }hope it works........
    Edited by: T.B.M on Nov 8, 2008 10:41 PM

  • Need help making a simple script for my webcam

    Hey everyone, fairly new to applescript programming. I just bought a usb camera for my macbook because I use it for video conferencing/playing around, and it is better quality than the built in isight. However, in order to use this camera I need to use drivers from a program called camTwist. This being said camTwist needs to be opened first and the usb camera must be selected from camTwist Step 1 list in order for any other application to use the camera. I just want to make a simple program that would open camTwist first, then select "webcam" from the list (double click it like I always have to in order to select it) in order to activate the driver, and then open photo booth which would then be using the camTwist driver in order to take pictures.
    I made a crude program but it does not automatically select "webcam" from the Step 1 list in camTwist:
    tell application "CamTwist" to activate
    delay 10
    tell application "Photo Booth" to activate
    that’s basically it. I set the delay to 10 seconds so that when camTwists boots up first I can manually select my webcam. HOWEVER, I would like to make a script that would boot up CamTwist first, select my webcam from the list automatically, and then open Photo Booth with the CamTwist webcam driver already selected.
    Don't know much about applescript so any help to make a working script to solve my problem would be greatly appreciated! Thanks!

    Solved my problem but now I need help with something else! First I used CamTwist user options to create user defined hot keys with the specific purpose to load the webcam. I chose Command+B. I tested it out in CamTwist and it worked. The program follows a logical order from there. First it loads CamTwist, then after a short delay it presses the hot keys in order to load the webcam from the video source list, then another short delay and Photo Booth is opened with the driver loaded from camTwist. Everything works Perfect! Here's the code:
    tell application "System Events"
    tell application "CamTwist" to activate
    delay 0.5
    --Press command+b which is a user defined hot key to load webcam
    key code 11 using command down
    end tell
    delay 0.5
    tell application "Photo Booth" to activate
    My Next question is, would it be possible with this same script to have both applications quit together. For example I always quit Photo Booth first, so when I quit photo booth is there a way to make CamTwist also quit and keep everything within the same script? Please let me know. This forum has been very helpful and lead me to a solution to my problem! Hoping I can solve this next problem as well! Thanks everyone.

Maybe you are looking for

  • G5 power problem

    I've recently been given a PowerMac G5 and as soon as I turn it on, the fans spin for a couple seconds and then it shuts off...Any idea at whats going on with it?

  • Oracle VM 3.0.2 cloning guest

    Hi all, I have issue with disk performance during VM cloning. there is just one virtual disk (35G) and cloning of this this is very long. As I understood OVM is just do copy of this disk and nothing more special. In 3 minutes only 1GB, my network is

  • JDBC thin driver pads CHAR col to byte size when NLS_LENGTH_SEMANTICS=CHAR

    We're using an Oracle 9.2 database with the database character set specified as AL32UTF8 with NLS_LENGTH_SEMANTICS set to CHAR. I've reproduced this problem with both the "classes12.zip" and "ojdbc14.jar" available with the Oracle 9.2 client installa

  • JDKs in weblogic server return wrong time zone

    Hi , i am running weblogic server 8.1.4, 8.1.6 and 10 on my windows vista all of the JDK bundled (both Sun's and JRockit) return GMT instead of my local time zone when i call Timezone.getDefault() I am quite sure the operating system has set to corre

  • Javax.crypto reference in NW Dev Studio

    Has anyone encountered and resolved the issue with trying to reference javax.crypto.* as an import with the Netweaver Development Studio?  i.e. Add a line like the following to your code: Cipher c; Then organise imports; and javax.cryto.cipher will b