2014-03-04 78 views
0

去年我做了一些简单的Java应用程序[我是一名工程专业的学生,​​我通过上一学期的课程爱上了Java] - 我学到了很多关于类,对象,听众和其他各种东西。问题是我必须使用不同寻常的库(我认为它们已经优化以缩短代码的很长一段时间,并让我们专注于面向对象的基础知识) - 这里是链接:http://useobjects.net/(从未在其他地方见过)。现在我正尝试在Java中创建一个简单的游戏(纸牌游戏,比如纸牌游戏),而不使用这些库 - 只使用swing和另一个众所周知的“核心”Java库 - 并且遇到各种问题(通常很少)主要是“每天”简单的任务。简单的Java游戏 - 小问题

第一个问题 - 如何将文件中的图像添加到Java中?比如说,我有班卡,可以显示或恢复,我需要使用2张图片(一张用于背面,一张用于正面);我找不到任何教程用BufferedImage,View,Image等等来解释整个过程。 (相比之下,在上面提到的图书馆,它只是这样的:。

ImageView cardBack = new ImageView(positionX, positionY, height, width, filepath, angle etc.); 

,并添加图像和任务完成

第二个问题是关于主应用程序窗口,在我们的旧图书馆,它只是像这样在主类:

MainWindow mainWindow = new MainWindow(title,height,width); 
GroupView mainGroup = mainWindow.getRootGroup(); 

但是,当我试图找出任何有关创建一个窗口,我发现只有JFrame的解决方案,我想问你一个简单的实现例如,也许如何(如果我应该创建一个“Main”类,其中JFrame只是一个元素,或者创建类MainWindow类并在此类中创建JFrame,并在Main中创建此类的实例,或者..简单地说,我担心,我的Java编码知识和XP并不完全符合惯例,所以我以这种方式请求一些建议)。

非常感谢你。

+0

那么你的问题是什么? – NESPowerGlove

+0

@NESPowerGlove如何将文件中的图像添加到java中,以及JFrame的简单实现示例。不是有史以来格式最好的问题,但问题肯定存在。 – quazzieclodo

+0

搜索在Google上使用ImageIO加载BufferedImage,并查看官方的Oracle教程,了解如何使用Swing以及如何构建JFrame。 – NESPowerGlove

回答

0

,你可以用下面的代码开始:

public static void show() throws Exception 
{ 
    final BufferedImage image = ImageIO.read(new File("<path>")); 

    JFrame window = new JFrame(); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setSize(300, 300); 

    window.setLayout(new BorderLayout()); 
    window.add(new JLabel("My Image name"), BorderLayout.NORTH); 
    window.add(new JImage(image), BorderLayout.CENTER); 

    window.setVisible(true); 
} 

static class JImage extends JPanel implements MouseListener 
{ 

    private BufferedImage image; 

    public JImage(BufferedImage image) 
    { 
     this.image = image; 
     addMouseListener(this); 

    } 

    @Override 
    protected void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, null); // see javadoc for more info on the parameters 
    } 

    @Override 
    public void mouseClicked(MouseEvent ev) 
    { 
     System.out.println(String.format("mouse clicked (x:%d, y:%s)", ev.getX(), ev.getY())); 
    } 

    @Override 
    public void mouseEntered(MouseEvent arg0) 
    {} 

    @Override 
    public void mouseExited(MouseEvent arg0) 
    {} 

    @Override 
    public void mousePressed(MouseEvent ev) 
    { 
     System.out.println(String.format("mouse pressed (x:%d, y:%s)", ev.getX(), ev.getY())); 
    } 

    @Override 
    public void mouseReleased(MouseEvent ev) 
    { 
     System.out.println(String.format("mouse released (x:%d, y:%s)", ev.getX(), ev.getY())); 
    } 
} 

这将创建一个包含图像的顶部一个标签一个简单的窗口。 你应该考虑转移到JavaFX,但我真的对客户端java UI编程知之甚少。

+0

非常感谢您的时间,现在我要尝试熟悉这些代码并使用它。只是一个问题 - 正如我打算制作类似单人纸牌一样,卡片(带图像)应该是鼠标可捕捉和可移动的 - 当图像放入这种布局时它会工作吗?我不确定,如果我不是绝对错误的,但我猜((f.e)BorderLayout的部分不可能随着鼠标点击而移动。或者它只是MouseListener的魔力? (从来没有应用过像这样的东西,只在单一类中) – user3380075

+0

就像你看到的那样,带图像的组件是JPanel的一个子类 - 它应该很容易附加一个MouseListener给它 - 但你应该尝试一下: - ) –

+0

我编辑了我的原始答案,包括鼠标事件捕获 –

0

“现在我试图创建一个简单的Java游戏,(纸牌游戏,说,像接龙),而不使用这些库 - 只与摇摆和其它通常已知的‘核心’的Java库”

首先您提供的代码不是核心Java。这是JavaFX。如果你想学习Swing,Oracle tutorials是一个很好的开始。您可以在该链接中找到Swing 的选项JavaFX路径

就图像而言,您有选项。您可以将ImageIcon加载到JLabel,或者将其绘制到JPanelJComponent上。这两种方法都可以在this thread

中可以看出,“如果我要创建一个‘主’类,其中将JFrame的只是一个因素,或使像主窗口和这个类中创建的JFrame,并创建一个实例这个类在主“

请参阅Extends JFrame vs. creating it inside the the program。如果您阅读上述链接中的一些教程,只需查看代码示例即可快速获取良好实践。