Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 如何设置JFrame';s图标使用到本地存储的原始路径_Java_Image_Swing_Jframe_Calculator - Fatal编程技术网

Java 如何设置JFrame';s图标使用到本地存储的原始路径

Java 如何设置JFrame';s图标使用到本地存储的原始路径,java,image,swing,jframe,calculator,Java,Image,Swing,Jframe,Calculator,我需要一些帮助,将JFrame的标题栏图标设置为计算机中的图像 我意识到计算器不完整。我仍然需要添加操作,但是我只想先这样做 如果你能把注意力集中在实际问题上,那将是令人震惊的。请不要建议设置特定的类路径。我想在不使用相对位置和排序的情况下从电脑中抓取图片。我以前尝试过使用相对位置,但是失败得很惨 这个程序是在BlueJ上完成的,只是出于个人喜好 图像尝试的代码在计算器方法下 文件路径为“C:/Users/Charlie/Downloads/smiley.png” 在继续之前,我想说的是,Ima

我需要一些帮助,将JFrame的标题栏图标设置为计算机中的图像

我意识到计算器不完整。我仍然需要添加操作,但是我只想先这样做

如果你能把注意力集中在实际问题上,那将是令人震惊的。请不要建议设置特定的类路径。我想在不使用相对位置和排序的情况下从电脑中抓取图片。我以前尝试过使用相对位置,但是失败得很惨

这个程序是在BlueJ上完成的,只是出于个人喜好

图像尝试的代码在计算器方法下

文件路径为“C:/Users/Charlie/Downloads/smiley.png”

在继续之前,我想说的是,
ImageMake.class
部分可以与
getClass()
互换,因此声明最终将是:

img=ImageIO.read(getClass().getResource(path))

现在,在另一节课上,你可以做一些如下的事情:

// Your code...
ImageMake image = new ImageMake("/res/textures/smiley.png");
genericJFrame.setIconImage(image.img); // This is just a random JFrame
// More of your code...
因此,现在我将讨论一些重要的事情,这些事情是以前从未在java中处理过图像的人(比如我自己)应该知道的

记得我在上面发布的ImageMake类中,有这样的代码:

img = ImageIO.read(ImageMake.class.getResource(path));
好的,ImageMake.class部分引用了您的类所在的文件夹,该文件夹位于您正在使用的任何存储设备上

在我的例子中,ImageMake类位于目录C:\Users\Charlie\Documents\total中

在同一个文件夹中,我创建了另一个名为“res”的文件夹,然后在其中创建了另一个名为“textures”的文件夹,然后添加了一个名为“smiley.png”的.png图像

当您传入图像的字符串“path”时,它将在您的类所在的文件夹中开始搜索。在我的例子中,我必须传入“/res/textures/smiley.png”确保使用正斜杠“/”,否则可能会出现编译时错误“非法转义字符”,或某些运行时错误

因此,到达我的图像的全部代码外目录是:C:\Users\Charlie\Documents\total\res\textures\smiley.png

以下是主类的半成品代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.BorderFactory.*;
import javax.swing.JApplet;
import java.util.ArrayList;

public class Calculator{
    private static JFrame f;
    private Font font;
    private boolean x = false, y = false;
    private double num, num1, num2, num3, ans;
    private int c = 0;
    private String word = "", save = "", keep = "";
    private JTextField tf = new JTextField("0");
    private static JPanel p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14;
    //private static ImageMake img = new ImageMake("/res/textures/smiley.png");
    public Calculator(){
        f = new JFrame("Calculator");
        try{
            javax.swing.UIManager.setLookAndFeel(new
                com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
        }catch(Exception e){}
        ArrayList<String> titles = new ArrayList<String>();
        ArrayList<JButton> buttons = new ArrayList<JButton>();
        for(int i = 0; i < 10; i++){
            titles.add("" + i);
        }
        titles.add("C");
        titles.add(".");
        titles.add("/");
        titles.add("*");
        titles.add("+");
        titles.add("-");
        titles.add("<");
        titles.add("=");

        for(int i = 0; i < titles.size(); i++){
            buttons.add(new JButton(titles.get(i)));
            buttons.get(i).addKeyListener(kl);
            buttons.get(i).addActionListener(al);
            buttons.get(i).setFocusable(false);
            if(i > 11 && i < 16)
            buttons.get(i).setPreferredSize(new Dimension(40, 40));
        else if(i > 15)
            buttons.get(i).setPreferredSize(new Dimension(85, 40));
        else
            buttons.get(i).setPreferredSize(new Dimension(50, 40));
        }

        font = new Font(Font.MONOSPACED, Font.PLAIN, 24);
        tf.setPreferredSize(new Dimension(290, 60));
        tf.setEditable(false);
        tf.setHorizontalAlignment(JTextField.RIGHT);
        tf.setFont(font);

        TitledBorder t0, t1, t2, t3;
        t0 = BorderFactory.createTitledBorder(" INPUT ");
        t1 = BorderFactory.createTitledBorder(" OPERATIONS ");

        p0 = new JPanel();
        p1 = new JPanel();
        p2 = new JPanel();
        p3 = new JPanel();
        p4 = new JPanel();
        p5 = new JPanel();
        p6 = new JPanel();
        p7 = new JPanel();
        p8 = new JPanel();
        p9 = new JPanel();
        p10 = new JPanel();
        p11 = new JPanel();
        p12 = new JPanel();
        p13 = new JPanel();
        p14 = new JPanel();

        p0.add(tf);
        p14.add(p0);
        p1.add(buttons.get(1)); p1.add(buttons.get(2)); p1.add(buttons.get(3));
        p2.add(buttons.get(4)); p2.add(buttons.get(5)); p2.add(buttons.get(6));
        p3.add(buttons.get(7)); p3.add(buttons.get(8)); p3.add(buttons.get(9));
        p4.add(buttons.get(10)); p4.add(buttons.get(0)); p4.add(buttons.get(11));
        p5.add(p1); p5.add(p2); p5.add(p3); p5.add(p4);
        p5.setLayout(new BoxLayout(p5, BoxLayout.PAGE_AXIS));
        p5.setBorder(t0);
        p6.add(buttons.get(16));
        p7.add(buttons.get(12)); p7.add(buttons.get(13));
        p8.add(buttons.get(14)); p8.add(buttons.get(15));
        p9.add(buttons.get(17));
        p10.add(p6); p10.add(p7); p10.add(p8); p10.add(p9);
        p10.setLayout(new BoxLayout(p10, BoxLayout.PAGE_AXIS));
        p10.setBorder(t1);
        p11.add(p5); p11.add(p10);
        p12.add(p14); p12.add(p11);
        p12.setLayout(new BoxLayout(p12, BoxLayout.PAGE_AXIS));

        f.addKeyListener(kl);
        f.add(p12);
    }
    public static void main(){
        new Calculator();
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //f.setIconImage(img.img);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setFocusable(true);
        f.setVisible(true);
    }
    public void operationType(String operation){
        if(operation.equals("=")){
            num2 = num3;
            operation = keep;
        }
        switch(operation){
            case "/": num = (num1 / num2); word = "" + num; break;
            case "*": num = (num1 * num2); word = "" + num; break;
            case "+": num = (num1 + num2); word = "" + num; break;
            case "-": num = (num1 - num2); word = "" + num; break;
        }
        num1 = num;
    }
    KeyListener kl = new KeyAdapter(){
        public void keyPressed(KeyEvent e){
            int press = e.getKeyCode();
            if(!word.equals("") && !word.equals("/") && !word.equals("*") && !word.equals("+") && !word.equals("-") && !word.equals(".")) ans = Double.parseDouble(word);
            if((word.equals("0") && press != KeyEvent.VK_ENTER && press != KeyEvent.VK_EQUALS) || 
                word.equals("/") ||
                word.equals("*") ||
                word.equals("+") ||
                word.equals("-") || x){
                word = "";
                x = false;
            }
            if(e.getKeyChar() == '+'){
                num1 = Double.parseDouble(word); word = save = keep = "+";
            }
            switch(press){
                case KeyEvent.VK_1: word += "1"; break;
                case KeyEvent.VK_2: word += "2"; break;
                case KeyEvent.VK_3: word += "3"; break;
                case KeyEvent.VK_4: word += "4"; break;
                case KeyEvent.VK_5: word += "5"; break;
                case KeyEvent.VK_6: word += "6"; break;
                case KeyEvent.VK_7: word += "7"; break;
                case KeyEvent.VK_8: word += "8"; break;
                case KeyEvent.VK_9: word += "9"; break;
                case KeyEvent.VK_0: word += "0"; break;
                case KeyEvent.VK_PERIOD: word += "."; break;
                case KeyEvent.VK_SLASH: num1 = ans; word = save = keep = "/"; break;
                case KeyEvent.VK_X: num1 = ans; word = save = keep = "*"; break;
                case KeyEvent.VK_MINUS: num1 = ans; word = save = keep = "-"; break;
                case KeyEvent.VK_ENTER:
                if(save.equals("=")){
                    num2 = ans; x = true; operationType(save);}
                else{
                    num2 = ans; num3 = num2; save = "="; x = true; operationType(save);} break;
                case KeyEvent.VK_BACK_SPACE:
                if(word.length() > 1)
                    word = word.substring(0, word.length() - 1);
                else if(word.length() == 1 || word.length() == 0)
                    word = "0"; break;
                case KeyEvent.VK_ESCAPE: word = "0"; break;
                case KeyEvent.VK_CONTROL: word = "0";
            }
            tf.setText(word);
        }
    };
    ActionListener al = new ActionListener(){
        public void actionPerformed(ActionEvent e){
            String action = e.getActionCommand();
            if(!word.equals("") && !word.equals("/") && !word.equals("*") && !word.equals("+") && !word.equals("-") && !word.equals(".")) ans = Double.parseDouble(word);
            if((word.equals("0") && !action.equals("=")) ||
                word.equals("/") || 
                word.equals("*") || 
                word.equals("+") || 
                word.equals("-") || x){
                word = "" ;
                x = false;
            }
            switch(action){
                case "1": word += "1"; break;
                case "2": word += "2"; break;
                case "3": word += "3"; break;
                case "4": word += "4"; break;
                case "5": word += "5"; break;
                case "6": word += "6"; break;
                case "7": word += "7"; break;
                case "8": word += "8"; break;
                case "9": word += "9"; break;
                case "0": word += "0"; break;
                case ".": word += "."; break;
                case "/": num1 = ans; word = save = keep = "/"; break;
                case "*": num1 = ans; word = save = keep = "*"; break;
                case "+": num1 = ans; word = save = keep = "+"; break;
                case "-": num1 = ans; word = save = keep = "-"; break;
                case "=":
                if(save.equals("=")){
                    num2 = ans; x = true; operationType(save);}
                else{
                    num2 = ans; num3 = num2; save = "="; x = true; operationType(save);} break;
                case "<":
                if(word.length() > 1)
                    word = word.substring(0, word.length() - 1);
                else if(word.length() == 1 || word.length() == 0)
                    word = "0"; break;
                case "C": word = "0"; break;
            }
            tf.setText(word);
        }
    };
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.border.*;
导入javax.swing.BorderFactory.*;
导入javax.swing.JApplet;
导入java.util.ArrayList;
公共类计算器{
私有静态jf帧;
专用字体;
私有布尔值x=false,y=false;
专用双num、num1、num2、num3、ans;
私有int c=0;
私有字符串word=“”,save=“”,keep=“”;
私有JTextField=newjtextfield(“0”);
专用静态JPanel p0、p1、p2、p3、p4、p5、p6、p7、p8、p9、p10、p11、p12、p13、p14;
//私有静态ImageMake img=newImageMake(“/res/textures/smiley.png”);
公共计算器(){
f=新的JFrame(“计算器”);
试一试{
javax.swing.UIManager.setLookAndFeel(新的
com.sun.java.swing.plaf.windows.WindowsLookAndFeel();
}捕获(例外e){}
ArrayList titles=新的ArrayList();
ArrayList按钮=新建ArrayList();
对于(int i=0;i<10;i++){
标题。添加(“+i”);
}
标题。添加(“C”);
标题。添加(“.”);
标题。添加(“/”);
标题。添加(“*”);
标题。添加(“+”);
标题。添加(“—”;
标题。添加(“尝试以下操作:

public static ImageIcon createIcon(String spec) {
    URL url = ClassLoader.getSystemResource(spec);
    if (url != null) {
        return new ImageIcon(url); 
    }
    try {
        return new ImageIcon(new URL(spec));
    } catch (MalformedURLException ex) {
        return new ImageIcon(spec);
    }
}

我非常感谢各位成员。这个社区似乎非常努力地确保只涉及问题的重要方面。但是,我不欣赏否决票关于这个问题。我觉得它遵循了明确问题是什么的指导原则,不应该有任何混淆。我在网上无休止地搜索答案,但人们只提供了其他方法,以满足OP的需要。毫无理由地否决这一点只会让o更难接受很难找到。不幸的是,我之前曾经尝试过类似的事情。当时我没有使用完整的
类来做这样的事情。我只是在calculator类中实例化了一个
ImageIcon
对象,并做了与您类似的事情。不幸的是,当您执行
frame.setIconImage(图标)时
它给出了一个错误,表示它期望的是
图像
,而不是
图像图标
。即使我尝试将其转换为
图像
,它也给出了一个错误,表示不允许我进行转换(由于
抽象
).在制作了
图像图标后,您是否知道通过制作一个图标使其工作的方法?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.BorderFactory.*;
import javax.swing.JApplet;
import java.util.ArrayList;

public class Calculator{
    private static JFrame f;
    private Font font;
    private boolean x = false, y = false;
    private double num, num1, num2, num3, ans;
    private int c = 0;
    private String word = "", save = "", keep = "";
    private JTextField tf = new JTextField("0");
    private static JPanel p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14;
    //private static ImageMake img = new ImageMake("/res/textures/smiley.png");
    public Calculator(){
        f = new JFrame("Calculator");
        try{
            javax.swing.UIManager.setLookAndFeel(new
                com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
        }catch(Exception e){}
        ArrayList<String> titles = new ArrayList<String>();
        ArrayList<JButton> buttons = new ArrayList<JButton>();
        for(int i = 0; i < 10; i++){
            titles.add("" + i);
        }
        titles.add("C");
        titles.add(".");
        titles.add("/");
        titles.add("*");
        titles.add("+");
        titles.add("-");
        titles.add("<");
        titles.add("=");

        for(int i = 0; i < titles.size(); i++){
            buttons.add(new JButton(titles.get(i)));
            buttons.get(i).addKeyListener(kl);
            buttons.get(i).addActionListener(al);
            buttons.get(i).setFocusable(false);
            if(i > 11 && i < 16)
            buttons.get(i).setPreferredSize(new Dimension(40, 40));
        else if(i > 15)
            buttons.get(i).setPreferredSize(new Dimension(85, 40));
        else
            buttons.get(i).setPreferredSize(new Dimension(50, 40));
        }

        font = new Font(Font.MONOSPACED, Font.PLAIN, 24);
        tf.setPreferredSize(new Dimension(290, 60));
        tf.setEditable(false);
        tf.setHorizontalAlignment(JTextField.RIGHT);
        tf.setFont(font);

        TitledBorder t0, t1, t2, t3;
        t0 = BorderFactory.createTitledBorder(" INPUT ");
        t1 = BorderFactory.createTitledBorder(" OPERATIONS ");

        p0 = new JPanel();
        p1 = new JPanel();
        p2 = new JPanel();
        p3 = new JPanel();
        p4 = new JPanel();
        p5 = new JPanel();
        p6 = new JPanel();
        p7 = new JPanel();
        p8 = new JPanel();
        p9 = new JPanel();
        p10 = new JPanel();
        p11 = new JPanel();
        p12 = new JPanel();
        p13 = new JPanel();
        p14 = new JPanel();

        p0.add(tf);
        p14.add(p0);
        p1.add(buttons.get(1)); p1.add(buttons.get(2)); p1.add(buttons.get(3));
        p2.add(buttons.get(4)); p2.add(buttons.get(5)); p2.add(buttons.get(6));
        p3.add(buttons.get(7)); p3.add(buttons.get(8)); p3.add(buttons.get(9));
        p4.add(buttons.get(10)); p4.add(buttons.get(0)); p4.add(buttons.get(11));
        p5.add(p1); p5.add(p2); p5.add(p3); p5.add(p4);
        p5.setLayout(new BoxLayout(p5, BoxLayout.PAGE_AXIS));
        p5.setBorder(t0);
        p6.add(buttons.get(16));
        p7.add(buttons.get(12)); p7.add(buttons.get(13));
        p8.add(buttons.get(14)); p8.add(buttons.get(15));
        p9.add(buttons.get(17));
        p10.add(p6); p10.add(p7); p10.add(p8); p10.add(p9);
        p10.setLayout(new BoxLayout(p10, BoxLayout.PAGE_AXIS));
        p10.setBorder(t1);
        p11.add(p5); p11.add(p10);
        p12.add(p14); p12.add(p11);
        p12.setLayout(new BoxLayout(p12, BoxLayout.PAGE_AXIS));

        f.addKeyListener(kl);
        f.add(p12);
    }
    public static void main(){
        new Calculator();
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //f.setIconImage(img.img);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setFocusable(true);
        f.setVisible(true);
    }
    public void operationType(String operation){
        if(operation.equals("=")){
            num2 = num3;
            operation = keep;
        }
        switch(operation){
            case "/": num = (num1 / num2); word = "" + num; break;
            case "*": num = (num1 * num2); word = "" + num; break;
            case "+": num = (num1 + num2); word = "" + num; break;
            case "-": num = (num1 - num2); word = "" + num; break;
        }
        num1 = num;
    }
    KeyListener kl = new KeyAdapter(){
        public void keyPressed(KeyEvent e){
            int press = e.getKeyCode();
            if(!word.equals("") && !word.equals("/") && !word.equals("*") && !word.equals("+") && !word.equals("-") && !word.equals(".")) ans = Double.parseDouble(word);
            if((word.equals("0") && press != KeyEvent.VK_ENTER && press != KeyEvent.VK_EQUALS) || 
                word.equals("/") ||
                word.equals("*") ||
                word.equals("+") ||
                word.equals("-") || x){
                word = "";
                x = false;
            }
            if(e.getKeyChar() == '+'){
                num1 = Double.parseDouble(word); word = save = keep = "+";
            }
            switch(press){
                case KeyEvent.VK_1: word += "1"; break;
                case KeyEvent.VK_2: word += "2"; break;
                case KeyEvent.VK_3: word += "3"; break;
                case KeyEvent.VK_4: word += "4"; break;
                case KeyEvent.VK_5: word += "5"; break;
                case KeyEvent.VK_6: word += "6"; break;
                case KeyEvent.VK_7: word += "7"; break;
                case KeyEvent.VK_8: word += "8"; break;
                case KeyEvent.VK_9: word += "9"; break;
                case KeyEvent.VK_0: word += "0"; break;
                case KeyEvent.VK_PERIOD: word += "."; break;
                case KeyEvent.VK_SLASH: num1 = ans; word = save = keep = "/"; break;
                case KeyEvent.VK_X: num1 = ans; word = save = keep = "*"; break;
                case KeyEvent.VK_MINUS: num1 = ans; word = save = keep = "-"; break;
                case KeyEvent.VK_ENTER:
                if(save.equals("=")){
                    num2 = ans; x = true; operationType(save);}
                else{
                    num2 = ans; num3 = num2; save = "="; x = true; operationType(save);} break;
                case KeyEvent.VK_BACK_SPACE:
                if(word.length() > 1)
                    word = word.substring(0, word.length() - 1);
                else if(word.length() == 1 || word.length() == 0)
                    word = "0"; break;
                case KeyEvent.VK_ESCAPE: word = "0"; break;
                case KeyEvent.VK_CONTROL: word = "0";
            }
            tf.setText(word);
        }
    };
    ActionListener al = new ActionListener(){
        public void actionPerformed(ActionEvent e){
            String action = e.getActionCommand();
            if(!word.equals("") && !word.equals("/") && !word.equals("*") && !word.equals("+") && !word.equals("-") && !word.equals(".")) ans = Double.parseDouble(word);
            if((word.equals("0") && !action.equals("=")) ||
                word.equals("/") || 
                word.equals("*") || 
                word.equals("+") || 
                word.equals("-") || x){
                word = "" ;
                x = false;
            }
            switch(action){
                case "1": word += "1"; break;
                case "2": word += "2"; break;
                case "3": word += "3"; break;
                case "4": word += "4"; break;
                case "5": word += "5"; break;
                case "6": word += "6"; break;
                case "7": word += "7"; break;
                case "8": word += "8"; break;
                case "9": word += "9"; break;
                case "0": word += "0"; break;
                case ".": word += "."; break;
                case "/": num1 = ans; word = save = keep = "/"; break;
                case "*": num1 = ans; word = save = keep = "*"; break;
                case "+": num1 = ans; word = save = keep = "+"; break;
                case "-": num1 = ans; word = save = keep = "-"; break;
                case "=":
                if(save.equals("=")){
                    num2 = ans; x = true; operationType(save);}
                else{
                    num2 = ans; num3 = num2; save = "="; x = true; operationType(save);} break;
                case "<":
                if(word.length() > 1)
                    word = word.substring(0, word.length() - 1);
                else if(word.length() == 1 || word.length() == 0)
                    word = "0"; break;
                case "C": word = "0"; break;
            }
            tf.setText(word);
        }
    };
}
public static ImageIcon createIcon(String spec) {
    URL url = ClassLoader.getSystemResource(spec);
    if (url != null) {
        return new ImageIcon(url); 
    }
    try {
        return new ImageIcon(new URL(spec));
    } catch (MalformedURLException ex) {
        return new ImageIcon(spec);
    }
}