简单的Java游戏 - 小问题

时间:2014-03-04 17:47:14

标签: java image jframe imageview mainwindow

去年我做了一些简单的Java应用程序[我是一名工科学生,上个学期我已经爱上了Java] - 我学到了很多关于类,对象,听众和其他各种东西的知识。问题是我不得不使用不寻常的库(我认为它们被优化以缩短代码的一些长部分而只是让我们专注于面向对象的基础) - 这里是链接:http://useobjects.net/(从未见过这些其他地方)。现在我正在尝试用Java创建一个简单的游戏,(纸牌游戏,像Solitaire这样的东西)没有使用这些库 - 只有swing和另一个众所周知的“核心”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解决方案,我想问你一个简单的实现示例,也许是如何解决类(如果我应该创建一个“主要的“类JFrame只是一个元素,或者在这个类中创建类似MainWindow的类并创建JFrame,并在Main中创建这个类的实例,或者......简直,我担心,我的Java编码知识并且XP与约定不完全兼容,所以我以这种方式提出一些建议。)

非常感谢你。

2 个答案:

答案 0 :(得分: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编程知之甚少。

答案 1 :(得分:0)

  

“现在我正在尝试用Java创建一个简单的游戏,(纸牌游戏,像Solitaire这样的东西)而不使用这些库 - 只有swing和另一个众所周知的”核心“Java库”

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

的选项

就图像而言,您有选择权。您可以将ImageIcon加载到JLabel,也可以将其绘制到JPanelJComponent上。这两个选项都可以在this thread

中看到
  

“我应该创建一个”Main“类,其中JFrame只是一个元素,或者创建类似MainWindow的类并在此类中创建JFrame,并在Main”

中创建此类的实例

Extends JFrame vs. creating it inside the the program。如果您阅读上面链接中的一些教程,只需查看代码示例,您就可以快速了解良好实践。