我如何找到我的JFrame的确切大小?

时间:2019-03-22 17:31:45

标签: java swing jframe jpanel paintcomponent

我目前正在尝试使用paintComponentJFrame上方的JPanel中间绘制一个正方形。我的框架的尺寸为600 x 600,但是当我尝试使用Xcoordinate = 300和Ycoordinate = 300绘制正方形时,该正方形实际上并没有接近框架的中间位置。

我做错什么了吗?这是针对学校项目的,因此任何提示也将不胜感激。预先感谢!

  

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

     

如果用户在15秒钟内保持不活动状态(即停止点击),则所有方格都应开始移开   从中心开始(任何速度都可以,重叠部分可以,但不是首选)。如果是正方形,则碰到边缘,   它们被再次删除。如果用户按“ S”,则正方形停止移动。用户清除框架   连续三秒钟(在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;
    }
}

1 个答案:

答案 0 :(得分:0)

  

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

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

自定义绘画是在添加到框架的面板上完成的。因此,我认为您确实应该尝试将面板居中放置在面板边界内。您需要澄清实际要求。

  

公共类Square扩展矩形{

为什么要扩展矩形?

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

但是,您不需要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);