【问题标题】:How do I find the exact size of my JFrame?如何找到我的 JFrame 的确切大小?
【发布时间】:2019-08-13 18:09:35
【问题描述】:

我目前正在尝试使用paintComponentJFrame 的中间在JPanel 上绘制一个正方形。我的框架的大小是 600 x 600,但是当我尝试使用 X 坐标 = 300 和 Y 坐标 = 300 绘制正方形时,该正方形甚至没有靠近我的框架的中间。

我做错了吗?这是一个学校项目,所以任何提示也将不胜感激。提前致谢!

编写一个完整的工作程序,在中间画一个正方形 框架。 当用户单击一个正方形(左键单击)时,它会将其替换为 4 更小 在不同的象限中绘制的正方形,每个象限的大小为四分之一 原来的 正方形,颜色随机。如果用户在任何方块上单击(右键单击),它 从框架中移除/删除。

如果用户保持不活动状态 15 秒((即停止点击),所有方块都应该开始移开 从中心(任何速度都很好,重叠很好但不是首选)。如果是正方形,则击中边缘, 它们再次被删除。如果用户按“S”,方块停止移动。当用户清除框架时 快速连续(3 秒内)按 3 次“删除”键,然后重新开始。

测试您的程序以绘制独特的图案。

我的框架类:

import javax.swing.*;
import java.awt.*;

public class SquareFrame extends JFrame {
    private final int WIDTH = 600, HEIGHT = 600;
    private final Dimension frameSize;
    private SquarePanel panel;
    public SquareFrame(){
        panel = new SquarePanel();
        frameSize = new Dimension(WIDTH,HEIGHT);
        this.setTitle("Sqaures");
        this.setSize(frameSize);
        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setVisible(true);
    }

public static void main(String[] args){
    SquareFrame frame = new SquareFrame();
}
}

我的面板类:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class SquarePanel extends JPanel implements MouseListener {

    public SquarePanel(){
        this.setBackground(Color.BLACK);
        this.setFocusable(true);
        this.setVisible(true);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Square test = new Square();
        g.setColor(Color.WHITE);
        g.drawRect(test.x,test.y,test.width,test.height);
    }

    @Override
    public void mouseClicked(MouseEvent e) { }

    @Override
    public void mousePressed(MouseEvent e) { }

    @Override
    public void mouseReleased(MouseEvent e) { }

    @Override
    public void mouseEntered(MouseEvent e) { }

    @Override
    public void mouseExited(MouseEvent e) { }
}

我的广场课:

import java.awt.*;

public class Square extends Rectangle {
    public Square(){
        this.height = 100;
        this.width = 100;
        this.x = 300;
        this.y = 200;
    }
}

【问题讨论】:

  • “在框架的中间” 我认为“框架”的意思是“绘图表面”(如JPanel)。 与发布此任务的人核实。 如果是这种情况,最好的方法是在计算绘制正方形的位置时使用面板的当前尺寸。

标签: java swing jframe jpanel paintcomponent


【解决方案1】:

编写一个完整的工作程序,在中间画一个正方形 框架。

嗯,我认为这是一个可怕的要求。框架包含一个标题栏和 4 个边框。随着框架尺寸的缩小,您将无法在标题栏上绘制正方形。

自定义绘画是在添加到框架的面板上完成的。所以我认为你真的应该尝试将面板置于面板边界的中心。您需要明确实际需求。

公共类 Square 扩展矩形 {

为什么要扩展 Rectangle?

如果您需要 x、y、宽度、高度信息,那么您只需使用 Rectangle 类的 getBounds() 方法即可获取信息。

但是,您不需要 x/y 值。

如果要使矩形居中,则需要在根据面板的当前大小进行自定义绘画时动态计算 x/y 值。

您需要知道的是要绘制的矩形的宽度/高度,所以实际上您应该创建一个Dimension 对象。比如:

Dimension d = new Dimension(100, 100); 

然后要在面板中居中矩形,您需要知道面板的宽度和矩形的宽度来计算绘制矩形的位置:

int x = (getWidth() - d.getWidth()) / 2;
int y = ...
g.drawRect(x, y, d.width, d.height);

【讨论】:

    猜你喜欢
    • 2023-01-10
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多