繁体   English   中英

使用fillRect在JFrame内的JPanel上绘制-矩形大小和位置问题?

[英]Drawing on a JPanel inside a JFrame using fillRect - rectangle sizing and position issues?

编辑:固定代码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;


public class JumpingBall extends JPanel{
@Override
public Dimension getPreferredSize()
{
    return new Dimension(300,300);
}


public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D rectangle = (Graphics2D) g;
    rectangle.setColor(Color.BLACK);
    rectangle.fillRect(0,270,300,30);
}


public static void main(String[] args) {
    JFrame frame = new JFrame("Jumping Ball");


    frame.getContentPane().add(new JumpingBall());
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
}
}

我已经为自己设定了编写一些代码的任务,该代码很容易使用户通过命令从地板上跳下来。 步骤1是创建一个窗口和一个地板-我注意到我添加地板的位置通常不在屏幕上,并在这里发现frame.setSize(x,y)包括边框,您应该在框架内嵌入一个JPanel并大小代替。 但是,在尝试进行这些更改时,无论变量如何,我的rectangle.fillRect(x,y,width,height)似乎都显示为小正方形顶部中心。 为什么会这样呢?

码:

    import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;

public class JumpingBall extends JPanel{
    public void paint(Graphics g){
        Graphics2D rectangle = (Graphics2D) g;
        rectangle.setColor(Color.BLACK);
        rectangle.fillRect(0,0,300,30);
    }

public static void main(String[] args) {
    JFrame frame = new JFrame("Jumping Ball");
    JPanel panel = new JPanel();

    panel.setPreferredSize(new Dimension(300,300));
    panel.add(new JumpingBall());

    frame.getContentPane().add(panel);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
}
}

这是我失败的发言的屏幕截图。

当您进行自定义绘画时:

  1. 您应该覆盖paintComponent()而不是paint()并调用super.paintComponent(g)作为第一条语句,以确保清除了背景。

  2. 重写该类的getPreferredSize()方法以返回面板的大小,以便布局管理器可以执行此操作。 因此,您的情况应该是(300,300)。

在您的代码中,您不应设置任何组件的首选大小。 布局管理器的工作是确定组件的首选大小。

panel.setPreferredSize(new Dimension(300,300));

当前,您设置了容纳跳球的面板的首选尺寸。 这没有帮助,因为尚未设置跳跃球的首选大小。 您会看到一个(10,10)正方形,因为该面板的FlowLayout决定了您的跳球面板的首选大小仅为(10,10)。

同样,也无需创建单独的面板。 您可以直接将JumpingBall面板添加到框架中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM