Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Icon和myIcon_Java_Eclipse_Icons_Defined - Fatal编程技术网

Java 使用Icon和myIcon

Java 使用Icon和myIcon,java,eclipse,icons,defined,Java,Eclipse,Icons,Defined,我正在练习使用Icon和myIcon,我得到一个错误,说myIcon必须在它自己的文件中定义。我很确定我是在代码中定义的,我不知道我做错了什么 import java.awt.*; import java.awt.geom.*; import javax.swing.*; public class TestIcon { public static void main(String[] args) { myIcon icn = new myIcon(40,50);

我正在练习使用Icon和myIcon,我得到一个错误,说myIcon必须在它自己的文件中定义。我很确定我是在代码中定义的,我不知道我做错了什么

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class TestIcon {
    public static void main(String[] args) {
        myIcon icn = new myIcon(40,50);
        JOptionPane.showMessageDialog(null, "Hello World!", "Message", JOptionPane.INFORMATION_MESSAGE, icn);
    }
}

public class myIcon implements Icon{
    private int width;
    private int height;

    public myIcon(int width, int height) {
        this.width=width;
        this.height=height;
    }
    public int getIconWidth(){
        return width;
    }
    public int getIconHeight(){
        return height;
    }
    public void paintIcon(Component c, Graphics g, int x, int y){
        Graphics2D g2 = (Graphics2D) g;
        Ellipse2D.Double ellipse = new Ellipse2D.Double(x,y,width, height);

        g2.setColor(Color.RED);
        g2.fill(ellipse);
    }
 }
或者将myIcon移动到它自己的文件中,或者使myIcon成为TestIcon的内部类,例如

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.Icon;
import javax.swing.JOptionPane;

public class TestIcon {

    public static void main(String[] args) {
        myIcon icn = new myIcon(40, 50);
        JOptionPane.showMessageDialog(null, "Hello World!", "Message", JOptionPane.INFORMATION_MESSAGE, icn);
    }

    public static class myIcon implements Icon {

        private int width;
        private int height;

        public myIcon(int width, int height) {
            this.width = width;
            this.height = height;
        }

        public int getIconWidth() {
            return width;   
        }

        public int getIconHeight() {
            return height;
        }

        public void paintIcon(Component c, Graphics g, int x, int y) {
            Graphics2D g2 = (Graphics2D) g;
            Ellipse2D.Double ellipse = new Ellipse2D.Double(x, y, width, height);

            g2.setColor(Color.RED);
            g2.fill(ellipse);
        }
    }

}

内部类施加了一些限制,因此取决于您想要做什么,将取决于您要做什么

删除TestIcon下的最后一个},并将其放在文件的末尾,这样myIcon就驻留在TestIcon中,使其成为一个内部类。然后需要将myIcon定义为static@MadProgrammer我尝试了这个,但得到了一个错误,说没有myIcon的封闭实例是可访问的。这帮了大忙!