Java 一些图像无法';I don’我不能马上画
我是Java GUI编程新手。下面的代码就是我简化的问题 单击面板时会绘制两个图像。一个是使用Java 一些图像无法';I don’我不能马上画,java,image,swing,awt,Java,Image,Swing,Awt,我是Java GUI编程新手。下面的代码就是我简化的问题 单击面板时会绘制两个图像。一个是使用drawVrImage()方法绘制的红框,另一个是使用drawrealmimage()方法绘制的红星。所有图像中的两个是沿着增加的行绘制的 以下是结果图像: 点击5次后显示。但是问题是drawRealImage()只绘制了4次图像,即使调用了5次。第一个红盒子在哪里?为什么buffereImage无法显示第一个红色框 GUI类仅用于加载图像。所有图像在启动时加载并放置HashMap。所以,我认为图像加
drawVrImage()
方法绘制的红框,另一个是使用drawrealmimage()
方法绘制的红星。所有图像中的两个是沿着增加的行绘制的
以下是结果图像:
点击5次后显示。但是问题是drawRealImage()
只绘制了4次图像,即使调用了5次。第一个红盒子在哪里?为什么buffereImage
无法显示第一个红色框
GUI
类仅用于加载图像。所有图像在启动时加载并放置HashMap
。所以,我认为图像加载(Qwirkle.getImage()
)不是问题。我认为缓冲图像并没有图像观察者是个问题。但如果真的有问题的话。我怎样才能画第二个红盒子
供您参考。下面是代码解释。类BIsource
有一个buffeImage
。当我单击UserPanel
时<BIsource
中的code>buffereImage获取其图形并绘制图像。完成绘制图像后,UserPanel
从BIsource获取该图像。并调用reapint()
方法<UserPanel
中的code>paintCompent()
我怎样才能解决这个问题
用户面板类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class UserPanel extends JPanel implements MouseListener {
private BIsource draw;
private BufferedImage bi;
public UserPanel() {
this.draw = new BIsource();
this.bi = draw.getBI();
this.addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
g.drawImage(bi, 0, 0, this);
}
@Override
public void mouseClicked(MouseEvent e) {
this.draw.drawVrImage();
this.draw.drawRealImage();
this.draw.incIndex();
bi = this.draw.getBI();
this.repaint();
}
class BIsource {
private BufferedImage biCanvas;
private HashMap<String, BufferedImage> imageMap;
private int index = 0;
public BIsource() {
// biCanvas Declaration
biCanvas = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics g = biCanvas.createGraphics();
g.setColor(Color.blue);
g.fillRect(0, 0, 500, 500);
g.dispose();
imageMap = new HashMap<>();
this.createVrImage();
}
private void createVrImage() {
BufferedImage vrImage = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics g = vrImage.createGraphics();
g.setColor(Color.red);
g.fillRect(0, 0, 50, 48);
g.dispose();
this.imageMap.put("TEST IMAGE", vrImage);
}
public BufferedImage getBI() {
return this.biCanvas;
}
public void drawVrImage() {
Graphics g = biCanvas.createGraphics();
g.drawImage(this.imageMap.get("TEST IMAGE"), 0, index * 50, null);
g.dispose();
}
public void drawRealImage() {
Graphics g = biCanvas.getGraphics();
g.drawImage(Qwirkle.getImage("RED STAR"), 200, index * 50, null);
g.dispose();
}
public void incIndex() {
index += 1;
}
}
public static void main(String[] args) {
Qwirkle.loadQwirkleImage();
JFrame mainFrame = new JFrame("Test Frame");
mainFrame.setLayout(null);
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
mainFrame.setBackground(Color.black);
mainFrame.setLocation(800, 400);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
UserPanel userPanel = new UserPanel();
mainFrame.add(userPanel);
userPanel.setSize(500, 500);
userPanel.setVisible(true);
}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.image.buffereImage;
导入java.util.HashMap;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类UserPanel扩展JPanel实现MouseListener{
私人双源提取;
私有缓冲映像bi;
公共用户面板(){
this.draw=new BIsource();
this.bi=draw.getBI();
这个。addMouseListener(这个);
}
@凌驾
受保护组件(图形g){
//TODO自动生成的方法存根
g、 drawImage(bi,0,0,this);
}
@凌驾
公共无效mouseClicked(MouseEvent e){
this.draw.drawVrImage();
this.draw.drawRealImage();
this.draw.incIndex();
bi=this.draw.getBI();
这个。重新绘制();
}
类双源{
私有缓冲区映像biCanvas;
私有HashMap-imageMap;
私有整数指数=0;
公共BIsource(){
//比坎瓦斯宣言
biCanvas=新的BuffereImage(500500,BuffereImage.TYPE_INT_ARGB_PRE);
Graphics g=biCanvas.createGraphics();
g、 setColor(Color.blue);
g、 fillRect(0,0500500);
g、 处置();
imageMap=newhashmap();
这个.createVrImage();
}
私有void createVrImage(){
BuffereImage vrImage=新的BuffereImage(50,50,BuffereImage.TYPE_INT_ARGB_PRE);
Graphics g=vrImage.createGraphics();
g、 setColor(Color.red);
g、 fillRect(0,0,50,48);
g、 处置();
this.imageMap.put(“测试图像”,vrImage);
}
公共缓冲区映像getBI(){
把这个还给我。比坎瓦斯;
}
公共图像(){
Graphics g=biCanvas.createGraphics();
g、 drawImage(this.imageMap.get(“测试图像”),0,索引*50,null);
g、 处置();
}
public void drawRealImage(){
Graphics g=biCanvas.getGraphics();
g、 drawImage(Qwirkle.getImage(“红星”),200,索引*50,空值);
g、 处置();
}
索引中的公共无效(){
指数+=1;
}
}
公共静态void main(字符串[]args){
loadQwirkleImage();
JFrame mainFrame=新JFrame(“测试帧”);
mainFrame.setLayout(空);
大型机。设置大小(500500);
mainFrame.setVisible(true);
主机。背景(颜色。黑色);
主机设置位置(800400);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
UserPanel UserPanel=新的UserPanel();
mainFrame.add(用户面板);
userPanel.setSize(500500);
setVisible(true);
}
@凌驾
公共无效mouseenterned(MouseEvent e){}
@凌驾
公共无效mouseExited(MouseEvent e){}
@凌驾
public void mousePressed(MouseEvent e){}
@凌驾
公共无效MouseEvent e{}
}
Qwirkle类
import java.awt.Image;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Random;
public class Qwirkle implements Serializable {
private static HashMap<String, Image> qwirkleImages;
// static initialize
static {
}
public enum Color {
CYAN, GREEN, ORANGE, PURPLE, RED, YELLOW
}
public enum Shape {
CIRCLE, CLOVER, DIAMOND, RECTANGLE, STAR, URCHIN
}
private final Color color;
private final Shape shape;
private final int index;
public Qwirkle(Color color, Shape shape, int index) {
this.color = color;
this.shape = shape;
this.index = index;
}
public static void loadQwirkleImage() {
if (Qwirkle.qwirkleImages == null) {
Qwirkle.qwirkleImages = new HashMap<>();
String key;
try {
for (Qwirkle.Color color : Qwirkle.Color.values()) {
for (Qwirkle.Shape shape : Qwirkle.Shape.values()) {
key = new String(color.toString() + " " + shape.toString());
Qwirkle.qwirkleImages.put(key, GUI.loadImage(key + ".jpg"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.err.println("Already Loading all Qwirkle Image");
}
}
public static Image getImage(String key) {
return qwirkleImages.get(key);
}
synchronized public String getKey() {
return new String(color.toString() + " " + shape.toString());
}
@Override
public String toString() {
return new String(color.toString() + " " + shape.toString() + " " + index);
}
public Color getColor() {
return color;
}
public Shape getShape() {
return shape;
}
}
导入java.awt.Image;
导入java.io.Serializable;
导入java.util.HashMap;
导入java.util.Random;
公共类Qwirkle实现了可序列化{
私有静态HashMap qwirkleImages;
//静态初始化
静止的{
}
公共枚举颜色{
青色、绿色、橙色、紫色、红色、黄色
}
公共枚举形状{
圆形、三叶草、钻石、矩形、星形、海胆
}
私人最终颜色;
私人最终形状;
私有最终整数指数;
公共Qwirkle(颜色、形状、整数索引){
这个颜色=颜色;
这个形状=形状;
这个指数=指数;
}
公共静态void loadQwirkleImage(){
if(Qwirkle.qwirkleImages==null){
Qwirkle.qwirkleImages=新HashMap();
字符串键;
试一试{
对于(Qwirkle.Color:Qwirkle.Color.values()){
对于(Qwirkle.Shape Shape:Qwirkle.Shape.values()){
key=新字符串(color.toString()+“”+shape.toString());
Qwirkle.qwirkleImages.put(key,GUI.loadImage(key+“.jpg”);
}
}
}捕获(例外e){
e、 printStackTrace();
}
}否则{
系统
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class UserPanel extends JPanel implements MouseListener {
private BIsource draw;
private BufferedImage bi;
public UserPanel() {
this.draw = new BIsource();
this.bi = draw.getBI();
this.addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
g.drawImage(bi, 0, 0, this);
}
@Override
public void mouseClicked(MouseEvent e) {
this.draw.drawVrImage();
this.draw.drawRealImage();
this.draw.incIndex();
bi = this.draw.getBI();
this.repaint();
}
class BIsource {
private BufferedImage biCanvas;
// private HashMap<String, Image> qwirkleImages;
private HashMap<String, BufferedImage> qwirkleImages;
private HashMap<String, BufferedImage> imageMap;
private int index = 0;
public BIsource() {
this.qwirkleImages = new HashMap<>();
this.loadAllImage();
// biCanvas Declaration
biCanvas = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics g = biCanvas.createGraphics();
g.setColor(Color.blue);
g.fillRect(0, 0, 500, 500);
g.dispose();
imageMap = new HashMap<>();
this.createVrImage();
}
public void loadAllImage() {
String key;
try {
for (Qwirkle.Color color : Qwirkle.Color.values()) {
for (Qwirkle.Shape shape : Qwirkle.Shape.values()) {
key = new String(color.toString() + " " + shape.toString());
qwirkleImages.put(key, GUI.loadImage2(key + ".jpg"));
System.out.println(key);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void createVrImage() {
BufferedImage vrImage = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics g = vrImage.createGraphics();
g.setColor(Color.red);
g.fillRect(0, 0, 50, 48);
g.dispose();
this.imageMap.put("TEST IMAGE", vrImage);
}
public BufferedImage getBI() {
return this.biCanvas;
}
public void drawVrImage() {
Graphics g = biCanvas.createGraphics();
g.drawImage(this.imageMap.get("TEST IMAGE"), 0, index * 50, null);
g.dispose();
}
public void drawRealImage() {
Graphics g = biCanvas.getGraphics();
Image image = this.qwirkleImages.get("RED STAR");
if (image == null) {
System.out.println("image is null");
}
g.drawImage(image, 200, index * 50, null);
System.out.println("DRAW Real");
g.dispose();
}
public void incIndex() {
index += 1;
}
}
public static void main(String[] args) {
System.out.println("load all images");
JFrame mainFrame = new JFrame("Test Frame");
mainFrame.setLayout(null);
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
mainFrame.setBackground(Color.black);
mainFrame.setLocation(800, 400);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
UserPanel userPanel = new UserPanel();
mainFrame.add(userPanel);
userPanel.setSize(500, 500);
userPanel.setVisible(true);
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}