2

私はJavaスイングでゲームを書いており、実装する必要があるクラスのレイヤーがいくつかあります。

クラスは次のとおりです。

  • Main() //ウィンドウをセットアップし、ゲームを作成し、setVisible
    • Game() //メインのゲーム キャンバスを描画し、ゲームに関するデータを維持し、各オブジェクトに自分自身を描画するよう指示します
      • Board() // 部屋と背景のグラフィックを描画します
        • Room() //部屋の中のものを描画し、場所を追跡します
          • Items() //場所、色、機能など
            • CollectibleItems() //アイテムを拡張する
            • Creatures() //アイテムを拡張する
      • ControlPanel() //何かをするボタンを入れる
      • StatePanel() //ルームのパネルにテキストを入れ、ロックされているかどうか

メインクラス:

import java.awt.*;

import javax.swing.*;

import javax.swing.border.*;

public class Main extends JFrame {
    public static void main (String [] args) {
        new Main ();
    }

    public Main () {
        // Window setup                                                                            
        setSize (700, 450);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container content = getContentPane();
        content.setLayout(new BorderLayout());


        // Put a Game in                                                                        
        Game myGame=new Game ();    
        myGame.setBorder(new LineBorder(Color.black, 9));
        content.add(myGame, BorderLayout.CENTER);

            setVisible (true);
    }

これは私のゲームクラスです。ここからボードとパネルを追加し、ボードにルームなどを追加したいのですが、クラスをカプセル化して追加し、setVisible にする方法がわかりません。メイン内でそれを行う方法は知っていますが、同様の content.add() タイプのものを使用してゲームに何かを追加する方法はありますか?

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class Game extends JComponent {
    public void paintComponent (Graphics g) {

        JPanel ControlPanel=new JPanel();
        ControlPanel.setLayout(new FlowLayout());
        ControlPanel.setBorder(new LineBorder(Color.red, 9));
    }
}

TL;DR- さまざまなクラスをカプセル化して表示するにはどうすればよいですか? JavaSwing の初心者...

4

1 に答える 1

3

まず、これをしないでください!! これまで!!

public void paintComponent (Graphics g) {

    JPanel ControlPanel=new JPanel();
    ControlPanel.setLayout(new FlowLayout());
    ControlPanel.setBorder(new LineBorder(Color.red, 9));
}

super.paintComponentまた、本当に本当に正当な理由がない限り、電話する必要があります。これらのメソッドは、多くの重要なバックグラウンド作業を行います。

anypaintXxxメソッドのコンテキスト内からコンポーネントを変更しないでください。これにより、無限ループに陥り、最終的にすべての CPU を消費します。

読み通すことから始めます

于 2012-10-03T00:50:43.193 に答える