Hi,
I'm working on an assignment for school...one of the applets i have to develop is a colour picker...But unfortunately i'm having some trouble with it...

I would just like to ask if anyone could help me along a little bit and give me some insight as what to do to change this into the non-depreciated format...

I've looked up on the list here, http://java.sun.com/j2se/1.4.2/docs/api/deprecated-list.html, and it states it has been replaced with processMouseEvent(MouseEvent).

I've tried to replace this with this code, but i get error after error..
Could anyone help me with this? I'm hitting a brick wall...
here is the whole applet if you want to have a look...i would REALLY appreciate it if someone could point me in the right direction at least, im not having much luck...


Here is my (pathetic) effort of trying to recode my program, but it doesnt work at all anymore...

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
public class ColourPickerMouse extends Applet implements MouseListener {
    Image rgbImageCanvas;                   // 
    Image rgbImageBar;                      // 
    int pixels[] = new int[0x10000];        // 
    int pixels2[] = new int[2560];          // 
    Color viewColor = Color.red;            // Default colour at start
    int rgbXSelect1;                        // Selecting bounds for x axis on Canvas
    int rgbYSelect1;                        // Selecting bounds for y axis on Canvas
    int rgbYSelect2;                        // Selecting bounds for y axis on Bar
    Label labelSample;                      // Label for sample colour square
    Label labelHex;                         // Label for Hex value
    TextField textFieldHex;                 // TextField for Hex value
    Label labelRGBValue;                    // Label for RGB value of Blue
    Label labelR;                           // Label for RGB value of Blue
    Label labelG;                           // Label for RGB value of Blue
    Label labelB;                           // Label for RGB value of Blue
    TextField textFieldB;                   // TextField for RGB value of Blue
    TextField textFieldR;                   // TextField for RGB value of Red
    TextField textFieldG;                   // TextField for RGB value of Green
    int x,y;
    public void init() {
        MakeImageCanvas();
        MakeImageBar();
        setLayout(null);
        labelSample = new Label("Selected Colour:");
        labelSample.setBounds(312, 12, 100, 10);
        add(labelSample);
        labelHex = new Label("Hex Value:");
        labelHex.setBounds(312, 80, 84, 24);
        add(labelHex);
        textFieldHex = new TextField();
        textFieldHex.setBounds(312, 110, 80, 20);
        textFieldHex.setEditable(false);
        add(textFieldHex);
        labelRGBValue = new Label("RGB Values:");
        labelRGBValue.setBounds(312, 150, 84, 24);
        add(labelRGBValue);
        labelR = new Label("Red:");
        labelR.setBounds(312, 178, 36, 20);
        add(labelR);
        textFieldR = new TextField();
        textFieldR.setBounds(360, 178, 45, 20);
        textFieldR.setEditable(false);
        add(textFieldR);
        labelG = new Label("Green:");
        labelG.setBounds(312, 202, 40, 20);
        add(labelG);
        textFieldG = new TextField();
        textFieldG.setBounds(360, 202, 45, 20);
        textFieldG.setEditable(false);
        add(textFieldG);
        labelB = new Label("Blue:");
        labelB.setBounds(312, 226, 40, 20);
        add(labelB);
        textFieldB = new TextField();
        textFieldB.setBounds(360, 226, 45, 20);
        textFieldB.setEditable(false);
        add(textFieldB);
        addMouseListener(this);
    }
    
    public void mouseMoved (MouseEvent e) {}
    public void mouseDragged (MouseEvent e) {}
    public void mouseReleased (MouseEvent e) {}
    public void mouseClicked (MouseEvent e) {}
    public void mouseEntered (MouseEvent e) {}
    public void mouseExited (MouseEvent e) {}
    public void mousePressed (MouseEvent e) {}
    public void processMouseEvent(MouseEvent event) {
        event.getX();
        event.getY();
        if (x >= 8 && y >= 8 && x <= 269 && y <= 269) {
            rgbXSelect1 = Math.max(0, Math.min(255, x - 10));
            rgbYSelect1 = Math.max(0, Math.min(255, y - 10));
            Graphics g = getGraphics();
            DrawBackground(g);
            DrawSelector(g);
        } else
        if (x >= 275 && y >= 8 && x <= 286 && y <= 263) {
            rgbYSelect2 = Math.max(0, Math.min(255, y - 10));
            viewColor = new Color(pixels2[rgbYSelect2 * 10]);
            MakeImageCanvas();
            Graphics g = getGraphics();
            DrawBackground(g);
        } else {
            return false;
        }
        return true;
    }
    public void paint(Graphics g) {
        DrawBackground(g);
        DrawSelector(g);
    }
    public void DrawBackground(Graphics g) { // Displays for the background of applet
        // If selection is over Canvas area it is covered
        g.setColor(Color.white);
        g.fillRect(5, 5, 266, 5);
        g.fillRect(5, 5, 5, 266);
        g.fillRect(267, 5, 5, 266);
        g.fillRect(5, 267, 266, 5);
        g.setColor(Color.black);
        // Border for Canvas
        g.drawRect(10, 10, 257, 257);
        // Display the colours for Canvas
        g.drawImage(rgbImageCanvas, 11, 11, this);
        // Border for Bar
        g.drawRect(276, 10, 11, 253);
        // Display the colours for Bar
        g.drawImage(rgbImageBar, 277, 11, this);
    }
    public void DrawSelector(Graphics g) { //Displays for Canvas, Bar and GUI
        // Selection circles
        g.setColor(Color.white);
        g.drawOval((10 + rgbXSelect1) - 5, (10 + rgbYSelect1) - 5, 11, 11);
        g.setColor(Color.black);
        g.drawOval((10 + rgbXSelect1) - 4, (10 + rgbYSelect1) - 4, 9, 9);
        // Selector on bar
         g.fillRect(274, (10 + rgbYSelect2) - 1, 16, 2);
        // Sample colour square
        int pickColor = pixels[rgbYSelect1 * 256 + rgbXSelect1] & 0xffffff;
        // Draw border
        g.drawRect(321, 35, 37, 37);
        // Get selected colour and fill square
        Color selectedColor = new Color(pickColor);
        g.setColor(selectedColor);
        g.fillRect(322, 36, 36, 36);
        // Textfield information
        textFieldHex.setText("#" + Integer.toHexString(pickColor).toUpperCase());
        textFieldR.setText(Integer.toString(selectedColor.getRed()));
        textFieldG.setText(Integer.toString(selectedColor.getGreen()));
        textFieldB.setText(Integer.toString(selectedColor.getBlue()));
    }
    public void FillArray(int pixels[], int counter, int r, int g, int b, int incR, int incG, int incB) { // Array to print colours
        for (int j = 0; j < 256; j += 6) {
            r += incR;
            g += incG;
            b += incB;
            for (int i = 0; i < 10; i++) {
                pixels[counter++] = 0xff000000 | r << 16 | g << 8 | b;
            }
        }
    }
    public void MakeImageCanvas() { // Make the colours for the Canvas from array
        int counter = 0;
        double incDestR = (double) ( -viewColor.getRed()) / 256D;
        double incDestG = (double) ( -viewColor.getGreen()) / 256D;
        double incDestB = (double) ( -viewColor.getBlue()) / 256D;
        for (int i = 255; i >= 0; i--) {
            int destR = Math.min(255, Math.max(0, (int) Math.round((double) viewColor.getRed() + (double) (255 - i) * incDestR)));
            int destG = Math.min(255, Math.max(0, (int) Math.round((double) viewColor.getGreen() + (double) (255 - i) * incDestG)));
            int destB = Math.min(255, Math.max(0, (int) Math.round((double) viewColor.getBlue() + (double) (255 - i) * incDestB)));
            double incR = (double) (destR - i) / 256D;
            double incG = (double) (destG - i) / 256D;
            double incB = (double) (destB - i) / 256D;
            for (int j = 0; j < 256; j++) {
                int r = Math.min(255, Math.max(0, (int) Math.floor((double) i + (double) j * incR)));
                int g = Math.min(255, Math.max(0, (int) Math.floor((double) i + (double) j * incG)));
                int b = Math.min(255, Math.max(0, (int) Math.floor((double) i + (double) j * incB)));
                pixels[counter++] = 0xff000000 | r << 16 | g << 8 | b;
            }
        }
        rgbImageCanvas = createImage(new MemoryImageSource(256, 256, pixels, 0, 256));
    }
    public void MakeImageBar() { // Make the colours for the Bar from array
        int counter = 0;
        FillArray(pixels2, counter, 255, 0, 0, 0, 6, 0);
        FillArray(pixels2, counter += 420, 255, 255, 0, -6, 0, 0);
        FillArray(pixels2, counter += 420, 0, 255, 0, 0, 0, 6);
        FillArray(pixels2, counter += 420, 0, 255, 255, 0, -6, 0);
        FillArray(pixels2, counter += 420, 0, 0, 255, 6, 0, 0);
        FillArray(pixels2, counter += 420, 255, 0, 255, 0, 0, -6);
        rgbImageBar = createImage(new MemoryImageSource(10, 252, pixels2, 0, 10));
    }
}

If anyone wants to look at the original code, feel free to ask!

Thanks for anyone having a look at this, i really REALLY appreciate it!

Thanks in advance!!
-Crawf

Dani AI

Generated

Short, practical fix for the compile/runtime problems seen here (and why hit that brick wall)

The old applet-style handlers like mouseDown(Event,int,int) and mouseUp(...) are from the legacy event model. The modern AWT approach is to use the java.awt.event classes (MouseListener / MouseMotionListener) or, if you prefer lower-level routing, override processMouseEvent/processMouseMotionEvent correctly. The errors in the posted attempt come from three common mistakes: 1) using the wrong method signature (trying to return boolean from processMouseEvent), 2) declaring mouse motion methods without implementing MouseMotionListener, and 3) calling getX()/getY() without storing or using their results (and using getGraphics() for persistent drawing).

Concrete steps to fix the applet logic

  • Register listeners: in init() call addMouseListener(...) and addMouseMotionListener(...) (or use MouseAdapter/MouseMotionAdapter for brevity).
  • Move the logic from mouseDown(...) into mousePressed(...) or mouseClicked(...). Use int mx = e.getX(), my = e.getY(); and update your selection fields. Event handler methods are void — do not return boolean.
  • Replace transient drawing with state + repaint(): update rgbXSelect1, rgbYSelect1, viewColor, call MakeImageCanvas() when the palette changes, then call repaint(). Let paint(Graphics g) do all actual drawing (this avoids flicker and lost draws).

If you prefer processMouseEvent

  • Call enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK) in init().
  • Override protected void processMouseEvent(MouseEvent e) (and motion counterpart) — signature returns void — and call super.processMouseEvent(e) as appropriate.

Minimal pattern (use this instead of copying the old mouseDown style):

addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
        int mx = e.getX(), my = e.getY();
        // if inside canvas:
        //   update rgbXSelect1,rgbYSelect1; call repaint();
        // else if inside bar:
        //   update rgbYSelect2, viewColor; MakeImageCanvas(); repaint();
    }
});

Troubleshooting notes: implement MouseMotionListener if you define mouseMoved/mouseDragged; avoid getGraphics() for persistent UI; ensure you actually read e.getX()/e.getY() into variables. The link posted is useful for reference but the listener approach above is the simplest, most robust migration.

Recommended Answers

All 9 Replies

Member Avatar for Member #46692

Can i c the original code plz?

And how do I run applets, is there a special command?

Member Avatar for Member #46692

How about plus the source

the original code...

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
public class ColourPicker extends Applet  {
    Image rgbImageCanvas;                   // 
    Image rgbImageBar;                      // 
    int pixels[] = new int[0x10000];        // 
    int pixels2[] = new int[2560];          // 
    Color viewColor = Color.red;            // Default colour at start
    int rgbXSelect1;                        // Selecting bounds for x axis on Canvas
    int rgbYSelect1;                        // Selecting bounds for y axis on Canvas
    int rgbYSelect2;                        // Selecting bounds for y axis on Bar
    Label labelSample;                      // Label for sample colour square
    Label labelHex;                         // Label for Hex value
    TextField textFieldHex;                 // TextField for Hex value
    Label labelRGBValue;                    // Label for RGB value of Blue
    Label labelR;                           // Label for RGB value of Blue
    Label labelG;                           // Label for RGB value of Blue
    Label labelB;                           // Label for RGB value of Blue
    TextField textFieldB;                   // TextField for RGB value of Blue
    TextField textFieldR;                   // TextField for RGB value of Red
    TextField textFieldG;                   // TextField for RGB value of Green
    public void init() {
        MakeImageCanvas();
        MakeImageBar();
        setLayout(null);
        labelSample = new Label("Selected Colour:");
        labelSample.setBounds(312, 12, 100, 10);
        add(labelSample);
        labelHex = new Label("Hex Value:");
        labelHex.setBounds(312, 80, 84, 24);
        add(labelHex);
        textFieldHex = new TextField();
        textFieldHex.setBounds(312, 110, 80, 20);
        textFieldHex.setEditable(false);
        add(textFieldHex);
        labelRGBValue = new Label("RGB Values:");
        labelRGBValue.setBounds(312, 150, 84, 24);
        add(labelRGBValue);
        labelR = new Label("Red:");
        labelR.setBounds(312, 178, 36, 20);
        add(labelR);
        textFieldR = new TextField();
        textFieldR.setBounds(360, 178, 45, 20);
        textFieldR.setEditable(false);
        add(textFieldR);
        labelG = new Label("Green:");
        labelG.setBounds(312, 202, 40, 20);
        add(labelG);
        textFieldG = new TextField();
        textFieldG.setBounds(360, 202, 45, 20);
        textFieldG.setEditable(false);
        add(textFieldG);
        labelB = new Label("Blue:");
        labelB.setBounds(312, 226, 40, 20);
        add(labelB);
        textFieldB = new TextField();
        textFieldB.setBounds(360, 226, 45, 20);
        textFieldB.setEditable(false);
        add(textFieldB);
        
    }
    public boolean mouseDown(Event evt, int x, int y) {
        if (x >= 8 && y >= 8 && x <= 269 && y <= 269) {
            rgbXSelect1 = Math.max(0, Math.min(255, x - 10));
            rgbYSelect1 = Math.max(0, Math.min(255, y - 10));
            Graphics g = getGraphics();
            DrawBackground(g);
            DrawSelector(g);
        } else
        if (x >= 275 && y >= 8 && x <= 286 && y <= 263) {
            rgbYSelect2 = Math.max(0, Math.min(255, y - 10));
            viewColor = new Color(pixels2[rgbYSelect2 * 10]);
            MakeImageCanvas();
            Graphics g = getGraphics();
            DrawBackground(g);
        } else {
            return false;
        }
        return true;
    }
    public void paint(Graphics g) {
        DrawBackground(g);
        DrawSelector(g);
    }
    public void DrawBackground(Graphics g) { // Displays for the background of applet
        // If selection is over Canvas area it is covered
        g.setColor(Color.white);
        g.fillRect(5, 5, 266, 5);
        g.fillRect(5, 5, 5, 266);
        g.fillRect(267, 5, 5, 266);
        g.fillRect(5, 267, 266, 5);
        g.setColor(Color.black);
        // Border for Canvas
        g.drawRect(10, 10, 257, 257);
        // Display the colours for Canvas
        g.drawImage(rgbImageCanvas, 11, 11, this);
        // Border for Bar
        g.drawRect(276, 10, 11, 253);
        // Display the colours for Bar
        g.drawImage(rgbImageBar, 277, 11, this);
    }
    public void DrawSelector(Graphics g) { //Displays for Canvas, Bar and GUI
        // Selection circles
        g.setColor(Color.white);
        g.drawOval((10 + rgbXSelect1) - 5, (10 + rgbYSelect1) - 5, 11, 11);
        g.setColor(Color.black);
        g.drawOval((10 + rgbXSelect1) - 4, (10 + rgbYSelect1) - 4, 9, 9);
        // Selector on bar
         g.fillRect(274, (10 + rgbYSelect2) - 1, 16, 2);
        // Sample colour square
        int pickColor = pixels[rgbYSelect1 * 256 + rgbXSelect1] & 0xffffff;
        // Draw border
        g.drawRect(321, 35, 37, 37);
        // Get selected colour and fill square
        Color selectedColor = new Color(pickColor);
        g.setColor(selectedColor);
        g.fillRect(322, 36, 36, 36);
        // Textfield information
        textFieldHex.setText("#" + Integer.toHexString(pickColor).toUpperCase());
        textFieldR.setText(Integer.toString(selectedColor.getRed()));
        textFieldG.setText(Integer.toString(selectedColor.getGreen()));
        textFieldB.setText(Integer.toString(selectedColor.getBlue()));
    }
    public void FillArray(int pixels[], int counter, int r, int g, int b, int incR, int incG, int incB) { // Array to print colours
        for (int j = 0; j < 256; j += 6) {
            r += incR;
            g += incG;
            b += incB;
            for (int i = 0; i < 10; i++) {
                pixels[counter++] = 0xff000000 | r << 16 | g << 8 | b;
            }
        }
    }
    public void MakeImageCanvas() { // Make the colours for the Canvas from array
        int counter = 0;
        double incDestR = (double) ( -viewColor.getRed()) / 256D;
        double incDestG = (double) ( -viewColor.getGreen()) / 256D;
        double incDestB = (double) ( -viewColor.getBlue()) / 256D;
        for (int i = 255; i >= 0; i--) {
            int destR = Math.min(255, Math.max(0, (int) Math.round((double) viewColor.getRed() + (double) (255 - i) * incDestR)));
            int destG = Math.min(255, Math.max(0, (int) Math.round((double) viewColor.getGreen() + (double) (255 - i) * incDestG)));
            int destB = Math.min(255, Math.max(0, (int) Math.round((double) viewColor.getBlue() + (double) (255 - i) * incDestB)));
            double incR = (double) (destR - i) / 256D;
            double incG = (double) (destG - i) / 256D;
            double incB = (double) (destB - i) / 256D;
            for (int j = 0; j < 256; j++) {
                int r = Math.min(255, Math.max(0, (int) Math.floor((double) i + (double) j * incR)));
                int g = Math.min(255, Math.max(0, (int) Math.floor((double) i + (double) j * incG)));
                int b = Math.min(255, Math.max(0, (int) Math.floor((double) i + (double) j * incB)));
                pixels[counter++] = 0xff000000 | r << 16 | g << 8 | b;
            }
        }
        rgbImageCanvas = createImage(new MemoryImageSource(256, 256, pixels, 0, 256));
    }
    public void MakeImageBar() { // Make the colours for the Bar from array
        int counter = 0;
        FillArray(pixels2, counter, 255, 0, 0, 0, 6, 0);
        FillArray(pixels2, counter += 420, 255, 255, 0, -6, 0, 0);
        FillArray(pixels2, counter += 420, 0, 255, 0, 0, 0, 6);
        FillArray(pixels2, counter += 420, 0, 255, 255, 0, -6, 0);
        FillArray(pixels2, counter += 420, 0, 0, 255, 6, 0, 0);
        FillArray(pixels2, counter += 420, 255, 0, 255, 0, 0, -6);
        rgbImageBar = createImage(new MemoryImageSource(10, 252, pixels2, 0, 10));
    }
}

Thanks for having a look at it for me!

-Crawf

Member Avatar for Member #46692

Hullo, did you check out my link in my other post? There is source code with it.

Yes, i did have a quick look at that page, but i have not yet looked at the source code...

hope it will help!

-Crawf

ah! just had a look at the code! it looks very similar to my code...hopefully everything should go smoothly!

Thanks for the applet, ill let you know if i have any problems! :)

-Crawf

Okay, well that actually didnt help that much...that applet has the same depreciation problem that i have...

public boolean mouseUp(java.awt.Event evt, int jx, int jy)

Thanks for the reference though! :) Does anyone have any ideas on how i could fix this?

Thanks!

-Crawf

Member Avatar for Member #46692

Okay, well that actually didnt help that much...that applet has the same depreciation problem that i have...

public boolean mouseUp(java.awt.Event evt, int jx, int jy)

Thanks for the reference though! :) Does anyone have any ideas on how i could fix this?

Thanks!

-Crawf

I'm sorrie I don't understand, what is deprecated? It works perfectly for me and I'm using the very latest Java development kit? The question is are you?

yes, i am up to date, as of yesterday actually! i double checked just then to verify...thats pretty weird...

regardless, i've figured it out now, and there are no further problems!

Thanks to all who helped!

-Crawf

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.