3

やあみんな私はJavaでfarmvilleに似たゲームを作成していますが、ユーザーがゲームクライアントと対話するために通常クリックするインタラクティブなオブジェクト/ボタンをどのように実装するのか疑問に思っています。

スイングライブラリ(一般的なウィンドウのようなオブジェクト)を使用したくないので、ボタンのカスタム画像をインポートし、GUIに使用される画像にボタンのようなプロパティを割り当てたいと思います。

何かアドバイス?ポインタはありますか?スイングを使用した簡単な例しか示していないため、YouTubeやその他のJavaゲームサイトではその情報を見つけることができないようです。

どんな助けでも深く感謝します!

よろしくガレス

4

2 に答える 2

5

本当にSwingを使用したくないのですか、それともJButtonやその他のスイングコントロールのデフォルトのルックアンドフィールを使用したくないだけですか?「(一般的なウィンドウはオブジェクトのように見える)」とはどういう意味ですか?

ボタンをカスタマイズしてその上に画像を含めることを説明しているソースはたくさんあります 。Javaでのカスタムボタンの作成

JButtonおよびその他のコントロールには、クリックリスナーの追加などに関連するすべてのイベントとメソッドがあります。独自のコントロールを作成することはおそらく望ましくありません。たとえば、「インタラクティブオブジェクト」とはどういう意味ですか?

単にアイコンをJButtonに追加したい場合は、Iconを受け取るコンストラクターを使用してください。

于 2011-09-26T19:29:22.200 に答える
-1

関数をオーバーライドするだけで、JButtonを使用できますpaint。そこに好きなものを描きます。これがどのように機能するかを最初に理解するまでにはしばらく時間がかかります。event-dispatching thread私はあなたが(ここに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);
    }

}
于 2011-09-26T20:09:45.647 に答える