如何在Java Applet中立即显示图像?
我在
Java Applet中创建了一个简单的内存游戏.卡有问题.在第一次出现时,图像需要一些额外的加载时间.如何解决?我需要在卡片翻转后立即显示图像.
我显示加载屏幕,直到应用程序不在AppStates.READY或AppStates.WAIT_FOR_START状态,但它没有帮助. Memo.cs – 带图像加载的主类 public class Memo extends JApplet { //... public void init() { //... try { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { createGUI(); }}); } catch(Exception e) { e.printStackTrace(); } } private void createGUI() { final Model model = new Model(...); final View view = new View(model); getContentPane().add(view,BorderLayout.CENTER); setBackground(backgroundColor); setPreferredSize(new Dimension(width,height)); model.setLoading(loadImages(loadingPath,format,1)); model.setCardsImages(loadImages(cardImagePath,13)); //... model.setAppState(AppStates.PROCESS); model.startNewGame(); view.repaint(); } private Image[] loadImages(String path1,String path2,int count) { Image[] imgs = new Image[count]; for(int i = 0; i < count; ++i) { imgs[i] = getImage(getCodeBase(),path1 + i + path2); } return imgs; } } Model.cs – 保存图像和应用程序状态,init板 public class Model { //... private AppStates appState; private Image[] cardsImages; public Model(...) { //... appState = AppStates.INIT; } public void startNewGame() { setAppState(AppStates.PROCESS); //... - init board - table with images' id setAppState(AppStates.WAIT_FOR_START); } public void setCardsImages(Image[] cardsImages) { this.cardsImages = cardsImages; } public Image getCardsImage(int v) { return cardsImages[v]; } public AppStates getAppState() { return appState; } public void setAppState(AppStates appState) { this.appState = appState; //... } //... } View.cs – 显示板 public class View extends JPanel { //... private Model model; public View(Model model) { this.model = model; //... } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; if(model != null) { switch (model.getAppState()) { //... case WAIT_FOR_START: case READY: //... drawBoard(g2d,model.getBoard(),model.getStates(),model.getFrontTypes()); break; } } repaint(); } private void drawBoard(Graphics2D g2d,int[][] board,int[][] states,int[][] frontTypes) { if(board != null && states != null && board.length > 0 && states.length > 0) { for(int x = 0; x < board.length; x++) { for(int y = 0; y < board[x].length; y++) { if(states[x][y] != Model.HIDE) { Image img = null; //... img = model.getCardsImage(board[x][y]); g2d.drawImage( img,model.getFirstCardX() + x * model.getCardDistance() + x * model.getCardWidth(),model.getFirstCardY() + y * model.getCardDistance() + y * model.getCardHeight(),model.getCardWidth(),model.getCardHeight(),null); //... } } } } } } 解决方法
来自JavaDocs ..
请改用 解决问题的另一种方法(不是你想要的方式)是改变.. g2d.drawImage( img,null); 至.. g2d.drawImage( img,this); 如果图像是异步加载的(例如,使用Applet.getImage(URL)),GUI会在更多可用时通知重绘. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用JSeperator时不寻常的差距 – Java
- Java 按行读取文件按行写入文件并以空格分割字符串的方法
- java-删除了ALPN回调:禁用了SPDY和HTTP / 2. alpn-boot是否
- 如何使用Abdera atom客户端发送内容和附件
- java – JAXB,CXF:没有ObjectFactory与@XmlElementDecl的元
- Java多线程回调方法实例解析
- java – HTTP状态500 – 未找到提供程序org.glassfish.json
- java – Mockito模拟一个Response类
- ArrayList和LinkedList和Vector的区别
- java – 删除最后一个逗号