<think>
我们使用Java的Swing库来创建一个窗口,并在其中添加一个带有像素人的标签(或自定义组件)。
由于要求中间一个像素人,我们可以将像素人图片放在一个JLabel中,然后将该标签添加到窗口的中心位置。
如果没有现成的像素人图片,我们可以用简单的图形绘制(例如使用一个自定义的JPanel绘制一个简单的像素人)。
这里我们采用两种方式中的一种:使用图片或自定义绘制。由于问题没有提供图片,我们假设使用自定义绘制一个简单的像素人。
我们将创建一个自定义的JPanel,并在其paintComponent方法中绘制一个简单的像素人(例如由方块组成)。
为了简化,我们绘制一个由多个小方块(像素)组成的简单人形。
步骤:
1. 创建一个JFrame窗口。
2. 创建一个自定义的JPanel(例如PixelManPanel)用于绘制像素人,并设置其背景颜色等。
3. 在PixelManPanel中重写paintComponent方法,使用Graphics对象绘制像素人。
4. 将自定义面板添加到JFrame的中心。
注意:为了使窗口居中显示,我们可以使用setLocationRelativeTo(null)。
假设我们绘制一个简单的像素人,例如:
头部:一个方块(比如在位置(45,5)处,大小为10x10)
身体:三个竖直排列的方块(比如在(45,15)、(45,25)、(45,35))
手臂:左右两个方块(比如左边(35,25),右边(55,25))
腿部:左右两个方块(比如左边(45,45)和(35,55)?右边(55,45)和(55,55))——这里可以自由设计。
但为了简单,我们设计一个由多个小方块(每个方块代表一个像素)组成的简单人形。
由于要求是“一个像素人”,我们可以用固定位置绘制,面板大小可以设置为100x100,然后窗口大小适当调整。
但是我们希望窗口中间显示,所以使用BorderLayout,将自定义面板放在中间。
由于每个像素块我们用一个矩形表示,假设每个像素块大小为10x10像素。
绘制位置(坐标)可以这样设置:
头部:(45, 5) -> 矩形(45,5,10,10)
身体:(45,15) -> (45,15,10,10)
(45,25,10,10)
(45,35,10,10)
左手臂:(35,25,10,10)
右手臂:(55,25,10,10)
左腿:(35,45,10,10) 和 (35,55,10,10) ? 或者直接两条腿各两个方块:左腿(45,45)和(45,55)?不对,应该分左右。
这里我们设计两条腿各两个方块:左腿从(35,45)开始,然后(35,55);右腿从(55,45)开始,然后(55,55)。但是这样腿的位置和身体不连贯。
调整:身体在(45,15)到(45,35),那么腿应该是从身体下方开始:
左腿:(35,45)和(35,55) -> 但这样与身体没有连接。所以我们调整腿的位置:
左腿:第一个方块在(35,45),第二个在(35,55)?或者连接身体的第一个腿方块应该在(45,45)?然后向外分开。
重新设计(简单点):
身体占三个方块(15到35,即15,25,35三个位置),然后腿的位置在身体下方,也就是从35+10=45开始。
左腿:两个方块,位置分别为(35,45)和(35,55)
右腿:(55,45)和(55,55)
这样,整个像素人由10个方块组成。
但是这样绘制,需要在一个足够大的面板上,所以面板大小可以设置为100x70(高度70,因为55+10=65,留点空白)。
注意:坐标系统是左上角为(0,0),向下为正。
我们将自定义面板的尺寸设置为100x70,然后将窗口大小设置为100x70(注意加上窗口标题栏和边框,所以实际窗口会大一些,但内容面板是100x70)。
或者我们可以让面板自己设定一个首选大小,然后使用pack()。
下面我们写代码:
</think>
以下是使用Java Swing实现一个包含居中像素人图形的窗口程序。代码创建了一个简单的像素艺术风格人物:
```java
import javax.swing.*;
import java.awt.*;
public class PixelManFrame extends JFrame {
public PixelManFrame() {
setTitle("像素人窗口");
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null); // 窗口居中
// 创建自定义面板绘制像素人
JPanel pixelPanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 设置背景色
g.setColor(new Color(240, 240, 240));
g.fillRect(0, 0, getWidth(), getHeight());
// 计算居中位置
int centerX = getWidth() / 2 - 25;
int centerY = getHeight() / 2 - 35;
// 绘制像素人(使用方块组合)
g.setColor(Color.BLACK);
// 头部
g.fillRect(centerX + 15, centerY, 20, 20);
// 身体
g.fillRect(centerX + 10, centerY + 20, 30, 30);
// 手臂
g.fillRect(centerX, centerY + 25, 10, 20);
g.fillRect(centerX + 40, centerY + 25, 10, 20);
// 腿部
g.fillRect(centerX + 10, centerY + 50, 10, 20);
g.fillRect(centerX + 30, centerY + 50, 10, 20);
// 眼睛
g.setColor(Color.WHITE);
g.fillRect(centerX + 20, centerY + 5, 5, 5);
g.fillRect(centerX + 30, centerY + 5, 5, 5);
}
};
add(pixelPanel);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(PixelManFrame::new);
}
}
```
### 代码说明:
1. 创建一个`JFrame`窗口,设置标题和关闭操作
2. 自定义`JPanel`实现`paintComponent`方法进行像素绘制
3. 像素人包含:
- 黑色头部(20x20像素)
- 身体(30x30像素)
- 左右手臂(各10x20像素)
- 双腿(各10x20像素)
- 白色眼睛(5x5像素)
4. 使用`centerX/centerY`计算确保图形居中
5. `SwingUtilities.invokeLater`确保线程安全
运行后会显示300x300窗口,中央位置有一个简笔画风格的像素人图形。