Java Swing为游戏添加组件

时间:2012-10-03 00:40:54

标签: java swing jpanel paintcomponent

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

以下是课程:

  • Main()//设置窗口,制作游戏和setVisible
    • Game()//绘制主游戏画布,维护游戏数据,告诉每个对象绘制自己
      • Board()//绘制房间和背景图形
        • 房间()//绘制房间内的东西,跟踪位置
          • 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的新手......

1 个答案:

答案 0 :(得分:3)

首先......不要这样做!! EVER !!

public void paintComponent (Graphics g) {

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

你也必须打电话给super.paintComponent,除非你真的有充分的理由不这样做。这些方法做了很多重要的背景工作。

永远不要在任何paintXxx方法的上下文中修改任何组件。这会让你进入一个无限循环,并最终耗尽你所有的CPU。

我首先要阅读