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