Java JFrame大小和中心

时间:2011-10-02 20:12:02

标签: java swing size shape graphics2d

我正在研究一个使用2D图形形状创建骰子面的uni项目。我已经完成了所有工作,但我遇到了一个问题:当我调整窗口大小时,我希望我的形状能够改变大小,而不是仅仅保持静止以使其保持在中间位置。

我以为我可以设置位置,这是中心试过这个但是没有用。我不确定但是我是否必须编写坐标以使其更改窗口的大小?对这两个问题的任何帮助都会很棒。

GUI设置代码

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class DiceSimulator {

    public static void main(String[] args) {
        JFrame frame = new JFrame("DiceSimulator");
        frame.setVisible(true);
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        draw object = new draw();
        frame.add(object);
        frame.setLocationRelativeTo(null);
        object.drawing();
    }
}

绘画代码

import javax.swing.*;
import java.awt.*;
//import java.util.Random;
public class draw extends JComponent {

    public void drawing() {
        repaint();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        //Random1 random = new Random1();

        Graphics2D g2 = (Graphics2D) g;
        g.setColor(Color.BLACK);
        Rectangle box = new Rectangle(115, 60, 150, 150);
        g2.fill(box);

        g.setColor(Color.WHITE);
        g.fillOval(145, 75, 30, 30);

        g.setColor(Color.WHITE);
        g.fillOval(205, 75, 30, 30);

        g.setColor(Color.WHITE);
        g.fillOval(145, 115, 30, 30);

        g.setColor(Color.WHITE);
        g.fillOval(205, 115, 30, 30);

        g.setColor(Color.WHITE);
        g.fillOval(145, 155, 30, 30);

        g.setColor(Color.WHITE);
        g.fillOval(205, 155, 30, 30);
    }
}

1 个答案:

答案 0 :(得分:4)

在paintComponent()方法中,您需要使用

int width = getSize().width;
int height = getSize().height;

获取组件的当前大小,因为它会在帧更改大小时更改大小。然后根据当前大小,您可以绘制组件。这意味着您无法对绘图方法中的值进行硬编码。

如果要使用一个命令移动所有绘图坐标,则可以使用:

g.translate(5, 5);

位于方法的顶部。然后,所有硬编码(x,y)值将被调整5个像素。这将允许您更改图纸的居中。