Java JFrame 大小和中心

发布于 2024-12-07 16:30:27 字数 1698 浏览 1 评论 0原文

我正在开发一个 uni 项目,该项目是使用 2d 图形形状创建骰子面。我已经完成了这一切,但我有一个问题:我希望我的形状在调整窗口大小时改变大小,而不是仅仅保持静止以使其保持在中间。

我以为我可以设置位置,以便处于中心位置,尝试了此操作,但没有成功。我不确定,但我是否必须编写坐标才能使其随窗口改变大小?任何对这两个问题的帮助都会很棒。

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);
    }
}

I'm working on a uni project which is to create a dice face using 2d graphics shapes. I have got that all done but I have a problem: I want my shape to change size when I adjust the window size, instead of just staying still also so that it stays in the middle.

I thought I could set the position so that is was center tried this but didn't work. I'm not sure but would I have to write co-ordinates so that its changes size with the window? Any help with both problems would be great.

GUI setup code

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();
    }
}

Painting code

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);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离去的眼神 2024-12-14 16:30:27

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

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

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

如果您想用一个命令移动所有绘图坐标,那么您可以

g.translate(5, 5);

在方法的顶部使用:。然后所有硬编码 (x, y) 值将分别调整 5 个像素。这将允许您更改绘图的中心位置。

In the paintComponent() method you need to use

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

to get the current size of the component as it changes size when the frame changes size. Then based on this current size you can draw your components. This means that you can't hardcode the values in your drawing methods.

If you want to shift all the drawing coordinates with one command then you can use:

g.translate(5, 5);

at the top of the method. Then all hardcoded (x, y) values will be adjusted by 5 pixels each. This will allow you to change the centering of the drawing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文