如何绘制显示我想要的单独窗口?

时间:2013-08-04 23:03:43

标签: java windows

我正在寻找它,所以我有一个单独的窗口可以显示任何东西,但为了我的目的,我希望它显示对象的位置,它们的状态(它们是否与某些东西相撞等)和等等,问题是,我不知道该怎么做。

我会使用System.out.println("Stuff: " + thing);,但信息会过快上升。

我制作了令人敬畏的图片来说明我的目标。

enter image description here

(编辑) 所以我正在寻找的是如何在图片中制作两个独立的窗口。它们是分开的,但仍然是一个程序。它背后的空白是桌面(我应该更清楚)第二个调试窗口可以做主窗口可以做任何事情(我的意思是它可以渲染形状,图像等)。我要问的是,我该如何做到这一点?

我会添加/更改什么以及在哪里使其工作?

public class Game extends JFrame implements Runnable, KeyListener
{
    JFrame frame;
    Graphics2D g2d;

    public static void main(String[] args)
    {
        new Game();
    }

    public Game()
    {       
        frame = new JFrame();

        setTitle("Battle for the Roids");
        setSize(SCREENWIDTH, SCREENHEIGHT);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        // Set up assets and initialize loop
    }

    // Lots of lines later

    public void paint(Graphics g)
    {
        // Set up double/triple buffering
        BufferStrategy bs = getBufferStrategy();
        if(bs == null)
        {
            createBufferStrategy(3);
            return;
        }

        g2d = (Graphics2D) g;

        g2d = (Graphics2D) bs.getDrawGraphics();

        // Add things to be rendered

        g2d.dispose();
        bs.show();
    }
}

我有很多额外的代码,但没有什么是必需的。主要是移动,旋转,键处理等代码。

2 个答案:

答案 0 :(得分:2)

如果这对你有帮助,请点击,但你可以做的是创建一个新的JFrame并让它出现在另一个类中。创建一个JLabel对象,并让它为您需要使用的对象设置所有信息。

例如,如果您想让它显示用户数据,您可能需要尝试:

 public class WindowSample extends JFrame {
    JLabel userData = new JLabel();
    add(userData);
    userData.setText(//information for user data);
 }

希望这有帮助!

答案 1 :(得分:1)

您可以使用Log4J并编写自己的appender,其唯一的责任是输出JTextAreaJList,这会将应用程序的两半分离。然后,您需要做的就是使用Logger来编写有关应用程序状态的信息。

如果这不符合您的需求,您可以编写一些链接到您的游戏模型的侦听器/观察者/回叫API。

然后,您就可以直接响应模型的更改。这可能会减慢你的游戏引擎速度,因为它需要在应用程序的任何部分发生变化时随时触发更新。

你可以通过使用一个单独的线程来调度这些事件,但这仍然会增加开销。

就个人而言,我喜欢第二种选择,但第一种选择更容易实现;)