我目前正在尝试使用paintComponent
在JFrame
上方的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;
}
}
答案 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);