【发布时间】:2019-08-13 18:09:35
【问题描述】:
我目前正在尝试使用paintComponent 在JFrame 的中间在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