从单独的类绘制到Panel

时间:2015-05-18 05:05:27

标签: java swing jframe jpanel java-2d

我一直在努力学习如何为游戏绘制Jpanel。我想从不同的类(例如管理地图的类和管理玩家模型的类)中绘制它。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main
{
public static void main (String[] args)
{
    JFrame frame = new JFrame ("Java Game");
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    frame.setSize (1000, 600);
    JPanel panel = new JPanel();
    panel.setBackground (Color.WHITE);
    Dimension size = new Dimension(1000,500);
    panel.add (new Player()); // Class with paintComponent method.
    panel.setPreferredSize(size);
    panel.setBackground(Color.BLUE);
    frame.getContentPane().add(panel);
    frame.setVisible(true);
}
}

下一堂课

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;

@SuppressWarnings ("serial")
public class Player extends JComponent
{
int x = 50;
int y = 450;
public void paintComponent (Graphics g)
{
    super.paintComponent(g);
    g.setColor (Color.BLACK);
    g.fillRect (x, y, 50, 50);
}
}

1 个答案:

答案 0 :(得分:1)

您可能希望扩展JPanel。它已经不透明了,它可以为你处理背景颜色。同时为您的面板提供与here相同的尺寸,然后您可以相对于尺寸进行绘图。

image

Player p = new Player();
p.setBackground(Color.cyan);
frame.add(p);
frame.pack();
frame.setVisible(true);
…
public class Player extends JPanel {

    private static final int X = 320;
    private static final int Y = 240;

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.fillRect(getWidth() / 2 - 25, getHeight() / 2 - 25, 50, 50);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(X, Y);
    }
}