为Java游戏创建一个交互式图形用户界面

3
嗨,大家好!我正在使用Java创建一个类似于Farmville的游戏,我想知道如何实现用户通常会点击以与游戏客户端交互的交互式对象/按钮。
我不想使用swing库(一般的Windows外观对象),我想导入自定义图像来为我的按钮分配类似于按钮的属性,这些属性将用于GUI。
有什么建议吗?有什么指针吗?我似乎无法通过YouTube或其他Java游戏网站找到那些信息,因为它们只显示使用swing的简单示例。
非常感谢您的帮助!
问候,
Gareth

你真的应该从Swing或SWT开始,以获得默认外观和感觉,并从那里进行自定义。如果你从AWT开始,那么你需要为每个操作系统定制你的应用程序。 - Mike Yockey
2个回答

5
你是真的不想使用Swing,还是只是不想使用JButton和其他Swing控件的默认外观?"(通用Windows样式对象)"是什么意思?
有很多资源可以描述如何自定义按钮并在其上添加图像: 在Java中创建自定义按钮 JButton和其他控件都具有与添加点击监听器等相关的所有事件和方法。您可能不想创建自己的控件。我们没有足够的信息可供参考,例如“交互式对象”是什么意思?
如果您只想将图标添加到JButton中,请使用带有图标的构造函数

我只是不喜欢JButton的默认外观。我只是想知道如何可能改变它。我的游戏按钮将是矩形的,上面有艺术图片,代表着像角色按钮、建筑按钮、地图按钮和市场按钮这样的东西。希望这能为您解决一些问题。 - Gareth
1
如果你想要一个带有图像的基本按钮(例如Sim City 2000面板),只需使用JButton的带有图标的构造函数即可。 - Stealth Rabbi
2
“我只是不喜欢JButton的默认外观。” 这个来源 展示了如何更改它,使其仅显示图像。按钮将与您放入其中的任何图像一样好看。 :) - Andrew Thompson
谢谢大家的评论和帮助,我会采纳并从中学习。非常感谢你们的时间和指导! - Gareth

0

你可以使用JButton,只需覆盖paint函数并在那里绘制任何你想要的东西。第一次理解这个过程可能需要一些时间。我建议你先了解一下事件分派线程这里是Java的解释)。

以下是我编写的一些代码,供你参考。

import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class Test extends JButton implements ActionListener{

    private static final long serialVersionUID = 1L;
    Image img;

        /**  constuctor     **/
    public Test(String tImg, JFrame parent){
        this.img = new ImageIcon(tImg).getImage();
        this.addActionListener(this);

    }


           /***********    this is the function you want to learn  ***********/
    @Override
    public void paint(Graphics g){
        g.drawImage(this.img, 0, 0, null);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO do some stuff when its clicked
        JOptionPane.showMessageDialog(null, "you clicked the button");
    }




    public static void main(String[] args) {
        JFrame f = new JFrame();
        Test t = new Test("pics.gif", f);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1, 1));
        f.add(t);
        f.setSize(400,600);
        f.setVisible(true);
    }

}

为什么你要子类化JButton并覆盖paint方法而不调用super.paint()呢?我认为这样做行不通。 为什么不直接使用带有图标的JButton构造函数呢? http://leepoint.net/notes-java/GUI/components/20buttons/23buttonicons.html - Stealth Rabbi
-1 1) 你为什么要重写 paint(Graphics) 而不是 paintComponent(Graphics)?2) 你为什么要扩展 JButton?它有许多方法可以设置不同用途的图像(请参见我的链接示例)。 - Andrew Thompson
1
所有的贬低是怎么回事?我只是想帮助别人,这是我所知道的最好的方法。以下是一些需要考虑的事情:1)做事情最正确的方式可能非常难学,而且那不总是提问者所寻找的。2)根据他的问题,他可能还有点新手。这是我学习的第一件事,也是一个很好的方向。3)他接受了我的答案作为最佳答案,所以这个简单的事实对他来说可能是最好的事情。4)如果这对他有很大的影响,他可以开另一个话题询问什么更有效率。 - Ramzi Khahil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接