import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;

class ImageDrawingComponent extends Component {

    static String descs[] = {
        "Simple Copy",
        "Scale Up",
        "Scale Down",
        "Scale Up : Bicubic",
        "Convolve : LowPass",
        "Convolve : Sharpen",
        "RescaleOp",
        "LookupOp",
    };

    int opIndex;
    private BufferedImage bi;
    int w, h;

    public static final float[] SHARPEN3x3 = { // sharpening filter kernel
        0.f, -1.f,  0.f,
       -1.f,  5.f, -1.f,
        0.f, -1.f,  0.f
    };

    public static final float[] BLUR3x3 = {
        0.1f, 0.1f, 0.1f,    // low-pass filter kernel
        0.1f, 0.2f, 0.1f,
        0.1f, 0.1f, 0.1f
    };

    public ImageDrawingComponent(URL imageSrc) {
        try {
            bi = ImageIO.read(imageSrc);
            w = bi.getWidth(null);
            h = bi.getHeight(null);
            if (bi.getType() != BufferedImage.TYPE_INT_RGB) {
                BufferedImage bi2 =
                    new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
                Graphics big = bi2.getGraphics();
                big.drawImage(bi, 0, 0, null);
                bi = bi2;
            }
        } catch (IOException e) {
            System.out.println("Image could not be read");
            System.exit(1);
        }
    }

    public Dimension getPreferredSize() {
        return new Dimension(w, h);
    }

    static String[] getDescriptions() {
        return descs;
    }

    void setOpIndex(int i) {
        opIndex = i;
    }

    /* In this example the image is recalculated on the fly every time
     * This makes sense where repaints are infrequent or will use a
     * different filter/op from the last.
     * In other cases it may make sense to "cache" the results of the
     * operation so that unless 'opIndex' changes, drawing is always a
     * simple copy.
     * In such a case create the cached image and directly apply the filter
     * to it and retain the resulting image to be repainted.
     * The resulting image if untouched and unchanged Java 2D may potentially
     * use hardware features to accelerate the blit.
     */
    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D) g;

        switch (opIndex) {
        case 0 : /* copy */
            g.drawImage(bi, 0, 0, null);
            break;

        case 1 : /* scale up using coordinates */
            g.drawImage(bi,
                        0, 0, w, h,     /* dst rectangle */
                        0, 0, w/2, h/2, /* src area of image */
                        null);
            break;

        case 2 : /* scale down using transform */
            g2.drawImage(bi, AffineTransform.getScaleInstance(0.7, 0.7), null);
            break;

        case 3: /* scale up using transform Op and BICUBIC interpolation */
            AffineTransform at = AffineTransform.getScaleInstance(1.5, 1.5);
            AffineTransformOp aop =
                new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
            g2.drawImage(bi, aop, 0, 0);
            break;

        case 4:  /* low pass filter */
        case 5:  /* sharpen */
            float[] data = (opIndex == 4) ? BLUR3x3 : SHARPEN3x3;
            ConvolveOp cop = new ConvolveOp(new Kernel(3, 3, data),
                                            ConvolveOp.EDGE_NO_OP,
                                            null);
            g2.drawImage(bi, cop, 0, 0);
            break;

        case 6 : /* rescale */
            RescaleOp rop = new RescaleOp(1.1f, 20.0f, null);
            g2.drawImage(bi, rop, 0, 0);
            break;

        case 7 : /* lookup */
            byte lut[] = new byte[256];
            for (int j=0; j<256; j++) {
                lut[j] = (byte)(256-j);
            }
            ByteLookupTable blut = new ByteLookupTable(0, lut);
            LookupOp lop = new LookupOp(blut, null);
            g2.drawImage(bi, lop, 0, 0);
            break;

        default :
        }
    }
}

public class ImageDrawingApplet extends JApplet {

    static String imageFileName = "bld.jpg";
    private URL imageSrc;

    public ImageDrawingApplet () {
    }

    public ImageDrawingApplet (URL imageSrc) {
        this.imageSrc = imageSrc;
    }

    public void init() {
        try {
            imageSrc = new URL(getCodeBase(), imageFileName);
        } catch (MalformedURLException e) {
        }
        buildUI();
    }

    public void buildUI() {
        final ImageDrawingComponent id = new ImageDrawingComponent(imageSrc);
        add("Center", id);
        JComboBox choices = new JComboBox(id.getDescriptions());
        choices.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JComboBox cb = (JComboBox)e.getSource();
                    id.setOpIndex(cb.getSelectedIndex());
                    id.repaint();
                };
            });
        add("South", choices);
    }

    public static void main(String s[]) {
        JFrame f = new JFrame("ImageDrawing");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        URL imageSrc = null;
        try {
             imageSrc = ((new File(imageFileName)).toURI()).toURL();
        } catch (MalformedURLException e) {
        }
        ImageDrawingApplet id = new ImageDrawingApplet(imageSrc);
        id.buildUI();
        f.add("Center", id);
        f.pack();
        f.setVisible(true);
    }
}

What's wrong with this code.
It shows these error message.

init:
deps-jar:
Created dir: C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\JavaApplication19\build\classes
Compiling 1 source file to C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\JavaApplication19\build\classes
C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\JavaApplication19\src\javaapplication19\Main.java:168: class ImageDrawingApplet is public, should be declared in a file named ImageDrawingApplet.java
public class ImageDrawingApplet extends JApplet {
1 error
BUILD FAILED (total time: 0 seconds)

Dani AI

Generated

Short answer: the compile failure comes from a filename / public-class mismatch. correctly pointed you toward that root cause — in Java a top-level public class must live in a source file whose name exactly matches the class name plus .java.

Fixes (pick one)

  • Rename the source file to match the public class (ImageDrawingApplet.java). In NetBeans use Refactor → Rename or create a new Java Class with that name in the same package and paste the code. After renaming, run Clean and Build.
  • Or make the class package-private (remove the public modifier) if you must keep the file named Main.java. Only do this when no other package needs to access that class publicly.

Quick checklist if problems persist

  • Confirm the package statement (if any) at the top of the file matches the folder under src (for example package javaapplication19; → file must be in src/javaapplication19).
  • Ensure there are no other top-level public classes with the same name elsewhere. Java allows at most one public top-level class per .java file.
  • On case-sensitive filesystems (Linux, macOS) verify exact casing of filename and class name.
  • If NetBeans still shows the old error, close/reopen the project or run Project → Clean and Build to remove stale compiled classes.

Context for modern use
This class extends JApplet. Applets are obsolete in recent Java releases and unsupported by modern browsers and JDKs; if you want a long-term solution, convert the UI code to a standalone Swing window (JFrame / JPanel) or run with an older JRE that supports applets. Note that ’s reply in this thread appears unrelated to the filename issue.

Recommended Answers

All 4 Replies

What is the name of the file you have written this code into ? It should be named exactly what the public class in it is named which is ImageDrawingApplet.

The compiler clearly tells you the error and also marks the line in error:
\src\javaapplication19\Main.java:168: class ImageDrawingApplet is public, should be declared in a file named ImageDrawingApplet.java

public class ImageDrawingApplet extends JApplet {

Read and try to look for the errors.

What is the name of the file you have written this code into ? It should be named exactly what the public class in it is named which is ImageDrawingApplet.

The compiler clearly tells you the error and also marks the line in error:

\src\javaapplication19\Main.java:168: class ImageDrawingApplet is public, should be declared in a file named ImageDrawingApplet.java
public class ImageDrawingApplet extends JApplet {

Read and try to look for the errors.

Hi, I have a suggestion:
The directory/folder, 'tools' and the file, 'encryptorTest.java' should be in the same directory/folder.
I'd like to know what errors you are getting.

Thanks!
Varsha.

Hi, I have a suggestion:
The directory/folder, 'tools' and the file, 'encryptorTest.java' should be in the same directory/folder.
I'd like to know what errors you are getting.

Thanks!
Varsha.

Ohh.. I am extremely sorry. This is not the answer for this question.

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.