2

我正在用 Java swing 编写游戏,并且有几层需要实现的类。

以下是课程:

  • Main() //设置窗口,制作游戏,并设置可见
    • 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);
    }

这是我的游戏课。从这里我想添加Board和Panels,我希望Board添加Rooms等。我不知道如何封装类并仍然添加它们和setVisible。我知道如何在 main 中做到这一点,但是有没有办法使用类似的 content.add() 类型的东西向 Game 添加东西?

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,除非你有一个非常非常好的理由不打电话。这些方法做了很多重要的背景工作。

paintXxx永远不要在 any方法的上下文中修改任何组件。这将使您陷入无限循环并最终消耗您所有的 CPU。

我会先通读一遍

于 2012-10-03T00:50:43.193 回答