Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 图像没有显示在Swing中?_Java_Swing_Paintcomponent - Fatal编程技术网

Java 图像没有显示在Swing中?

Java 图像没有显示在Swing中?,java,swing,paintcomponent,Java,Swing,Paintcomponent,我真的不知道我做错了什么。(虽然我确信这是相当多的。)我已经试着调整我的代码好几个小时了,但没有用 我正试图把一张图片切成几块,然后展示出来。稍后,我将随机化它们的位置,并尝试将它们放置在正确的位置。然而,现在我的JPanel上出现了任何问题。有一次,我的测试代码显示了这个图像。然而,现在相同的测试代码不起作用 如果你能看到我做错了什么/问题出在哪里,请告诉我。希望这是一件简单而愚蠢的事情 import java.awt.*; import java.awt.event.MouseAdapter

我真的不知道我做错了什么。(虽然我确信这是相当多的。)我已经试着调整我的代码好几个小时了,但没有用

我正试图把一张图片切成几块,然后展示出来。稍后,我将随机化它们的位置,并尝试将它们放置在正确的位置。然而,现在我的JPanel上出现了任何问题。有一次,我的测试代码显示了这个图像。然而,现在相同的测试代码不起作用

如果你能看到我做错了什么/问题出在哪里,请告诉我。希望这是一件简单而愚蠢的事情

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.swing.*;

public class Lab10 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
        MyPanel panel = new MyPanel();
        frame.add(panel);
        panel.setFocusable(true);


    }

}

class MyFrame extends JFrame{
    MyFrame(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setSize(800,800);
        setResizable(false);
    }
}

class MyPanel extends JPanel{
    public static final int SIZE = 4;
    private int oldx = -1;
    private int oldy = -1;
    private final String fileName = "houseTyrell.png";

    public ImageArray imageArray = new ImageArray(fileName, SIZE);

    MyPanel(){

        addMouseListener(new MouseAdapter(){

            public void mousePressed(MouseEvent e){
                if(e.getButton()==1){
                    if(oldx == -1){
                        oldx = e.getX();
                        oldy = e.getY();
                    }else{
                        //imageArray.swapPoints(oldx, oldy, e.getX(), e.getY());
                        oldx = -1;
                        oldy = -1;
                        repaint();
                    }
                }
            }
        });
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        imageArray.draw(g2);

        /*Image image2;
        try {
            image2 = ImageIO.read(new File("houseTyrell.png"));
            System.out.println("I should print");

            try{
                g2.drawImage(image2, 0, 0, null);
            } catch(Exception my){
                System.out.println("Drawing issue");
            }

        } catch (IOException ex) {
            System.out.println("Reading issue");

        }*/

    }
}


class ImageArray{
    private Square[][] squares;
    private String fileName;
    private int size;
    private int w;
    private int h;

    public ImageArray(String fileName, int size) {
        this.size = size;
        this.fileName= fileName;
        squares = new Square[size][size];
        try {
            BufferedImage image = ImageIO.read(new File(fileName));
            w = image.getWidth() / size;
            h = image.getHeight() / size;
            for (int row = 0; row < size; row++) {
                for (int col = 0; col < size; col++) {
                    squares[row][col] = new Square(
                    image.getSubimage(row * w , col * h , w, h), row, col, w, h);
                }
            }

        } catch (Exception e) {
            System.out.println("Can't open file!");
        }
        shuffle();
        } 

    //TODO
    public void shuffle(){
        for(int i = 0; i < size * size; i++){

        }
    }

    //TODO
    public void swapPoints(int oldx, int oldy, int newx, int newy){

    }

    public void draw(Graphics2D g2){
        for(int i = 0; i < squares.length; i++){
            for(int j = 0; j < squares[0].length; j++){
                Square square = squares[i][j];
                square.draw(g2);

            }
        }
    }

}

class Square{
    private BufferedImage image;
    private int row;
    private int col;
    private int x,y;
    private int w;
    private int h;

    Square(BufferedImage image, int row, int col, int w, int h){
        this.image = image;
        this.row = row;
        this.col = col;
        this.x = row * w;
        this.y = col * h;
        this.w = w;
        this.h = h;
    }

    public void draw(Graphics2D g2){
        try{
            g2.drawImage(image, x, y, null);
        } catch (Exception my){
            System.out.println("Square issue");
        }
    }

    public BufferedImage getImage(){
        return image;
    }

    public int getRow(){
        return row;
    }

    public int getCol(){
        return col;
    }
}
import java.awt.*;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.geom.*;
导入java.awt.image.buffereImage;
导入java.io.*;
导入java.util.*;
导入javax.imageio.*;
导入javax.swing.*;
公共类Lab10{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
MyFrame=新的MyFrame();
MyPanel=新的MyPanel();
框架。添加(面板);
面板设置可聚焦(真);
}
}
类MyFrame扩展了JFrame{
MyFrame(){
setDefaultCloseOperation(关闭时退出);
setVisible(真);
设置大小(800800);
可设置大小(假);
}
}
类MyPanel扩展了JPanel{
公共静态最终整数大小=4;
私有整数oldx=-1;
private int oldy=-1;
私有最终字符串fileName=“houseTyrell.png”;
公共ImageArray ImageArray=新的ImageArray(文件名、大小);
我的小组(){
addMouseListener(新的MouseAdapter(){
公共无效鼠标按下(MouseEvent e){
如果(如getButton()==1){
如果(oldx==-1){
oldx=e.getX();
oldy=e.getY();
}否则{
//交换点(oldx,oldy,e.getX(),e.getY());
oldx=-1;
oldy=-1;
重新油漆();
}
}
}
});
}
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
imageArray.draw(g2);
/*图像2;
试一试{
image2=ImageIO.read(新文件(“houseTyrell.png”);
System.out.println(“我应该打印”);
试一试{
g2.drawImage(图像2,0,0,空);
}捕获(我的异常){
系统输出打印号(“图纸发布”);
}
}捕获(IOEX异常){
System.out.println(“阅读问题”);
}*/
}
}
类ImageArray{
私人广场[][]个广场;
私有字符串文件名;
私有整数大小;
私人int w;
私有inth;
公共ImageArray(字符串文件名,整数大小){
这个。大小=大小;
this.fileName=文件名;
正方形=新正方形[大小][大小];
试一试{
buffereImage image=ImageIO.read(新文件(文件名));
w=image.getWidth()/size;
h=image.getHeight()/size;
对于(int row=0;row
在完成建立UI之前,如果要使框架可见,请尝试在添加
面板后在框架上调用
无效
验证
重新绘制

public static void main(String[] args) {
    MyFrame frame = new MyFrame();
    MyPanel panel = new MyPanel();
    frame.add(panel);
    panel.setFocusable(true);
    frame.invalidate();
    frame.validate();
    frame.repaint();

}

坦白地说,你的<代码> MyFrase>代码>类做得很少(其他的则使你的生活更困难),我会考虑把它去掉,或者用一个建造者方法来替换它,它返回一个不可见的帧…

您还应该在事件调度线程的上下文中创建UI,这有助于解决其他“奇怪”问题


有关更多详细信息,请参见在完成建立UI之前使框架可见,请尝试在添加
面板后在框架上调用
无效
验证
重新绘制

public static void main(String[] args) {
    MyFrame frame = new MyFrame();
    MyPanel panel = new MyPanel();
    frame.add(panel);
    panel.setFocusable(true);
    frame.invalidate();
    frame.validate();
    frame.repaint();

}

坦白地说,你的<代码> MyFrase>代码>类做得很少(其他的则使你的生活更困难),我会考虑把它去掉,或者用一个建造者方法来替换它,它返回一个不可见的帧…

您还应该在事件调度线程的上下文中创建UI,这有助于解决其他“奇怪”问题