Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame窗口中的矩形_Java_Swing_Jframe - Fatal编程技术网

Java JFrame窗口中的矩形

Java JFrame窗口中的矩形,java,swing,jframe,Java,Swing,Jframe,所以我尝试使用JFrame将Rectangle2D.Float放在窗口中,但当我编译代码时,我得到的是没有矩形的空白窗口。你们能看看,告诉我我做错了什么吗 package zestaw8; import javax.swing.*; import java.awt.*; import java.awt.geom.*; class Plansza85 extends JPanel { Shape figura; Plansza85(Shape figura)

所以我尝试使用JFrame将Rectangle2D.Float放在窗口中,但当我编译代码时,我得到的是没有矩形的空白窗口。你们能看看,告诉我我做错了什么吗

package zestaw8;

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

class Plansza85 extends JPanel
{
   Shape figura;
   Plansza85(Shape figura)            
   {                                
      this.figura=figura;
   }                                
}

public class Zestaw8_cw85 
{
    public static void main(String[] args)                
   {                                                     
      Shape obj1;                                        
      obj1=new Rectangle2D.Float(100,100,140,140);      

      zestaw8.Plansza85 p;                                         
      p=new zestaw8.Plansza85(obj1);

      JFrame jf=new JFrame();                            
      jf.setTitle("Plansza p");                       
      jf.setSize(400,400);                               
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      jf.setVisible(true);
      jf.add(p);
   }
}

您需要覆盖
Plansza85

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

class Plansza85 extends JPanel {
    private Shape figura;

    Plansza85(Shape figura) {
        this.figura = figura;
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.draw(figura);
    }
}

public class Zestaw8_cw85 {
    public static void main(String[] args) {
        Shape obj1;
        obj1 = new Rectangle2D.Float(100, 100, 140, 140);

        Plansza85 p;
        p = new Plansza85(obj1);

        JFrame jf = new JFrame();
        jf.setTitle("Plansza p");
        jf.setSize(400, 400);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.add(p);
        jf.setVisible(true);
    }
}

希望能有所帮助

您需要覆盖
Plansza85的
paintComponent
方法

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

class Plansza85 extends JPanel {
    private Shape figura;

    Plansza85(Shape figura) {
        this.figura = figura;
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.draw(figura);
    }
}

public class Zestaw8_cw85 {
    public static void main(String[] args) {
        Shape obj1;
        obj1 = new Rectangle2D.Float(100, 100, 140, 140);

        Plansza85 p;
        p = new Plansza85(obj1);

        JFrame jf = new JFrame();
        jf.setTitle("Plansza p");
        jf.setSize(400, 400);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.add(p);
        jf.setVisible(true);
    }
}

希望能有所帮助

你似乎误解了绘画是如何在摇摆中进行的

从看开始,然后
Rectangle2D
是一种图形原语,需要通过正常的自定义绘制过程进行绘制

根据的常见建议,您应该覆盖
Plansza85
paintComponent
方法,并通过
Graphics2D
API绘制
Shape
,类似于

比如说


我还重写了
getPreferredSize
方法,根据形状的大小为组件生成适当的大小提示,我之所以这样做是因为我不喜欢猜测工作,而且窗口还包括可变大小的边框和标题栏,如果您只依赖
setSize

的话,它们会改变面板的大小。您似乎对Swing中的绘画工作有误解

从看开始,然后
Rectangle2D
是一种图形原语,需要通过正常的自定义绘制过程进行绘制

根据的常见建议,您应该覆盖
Plansza85
paintComponent
方法,并通过
Graphics2D
API绘制
Shape
,类似于

比如说


我还重写了
getPreferredSize
方法,根据形状的大小为组件生成适当的大小提示,我之所以这样做是因为我不喜欢猜测工作,而且窗口还包括可变大小的边框和标题栏,如果您仅依赖
setSize

交换最后两个命令,则这些边框和标题栏将改变面板的大小,将
setVisible()
放在最后。您可能希望从查看和开始
Rectangle2D
是一种图形原语,需要通过正常的绘制自定义绘制过程绘制。将最后两个命令调换为将
setVisible()
放在最后。您可能需要从查看和开始
Rectangle2D
是一个图形原语,需要通过正常的绘制自定义绘制过程绘制此
Rectangle bounds=this.figura.getBounds();g、 drawRect((int)bounds.getX(),(int)bounds.getY(),(int)bounds.getWidth(),(int)bounds.getHeight())最好替换为
Graphics2D g2=(Graphics2D)g;g2.绘制(图A)。它不仅更短,而且如果规范将来更改为包含椭圆或多边形,它将按预期工作!对答案进行编辑要比同意我是正确的更有成效@AndrewThompson我会的,我正在使用stackoverflow移动应用程序。给出一个小时:-)this
Rectangle bounds=this.figura.getBounds();g、 drawRect((int)bounds.getX(),(int)bounds.getY(),(int)bounds.getWidth(),(int)bounds.getHeight())最好替换为
Graphics2D g2=(Graphics2D)g;g2.绘制(图A)。它不仅更短,而且如果规范将来更改为包含椭圆或多边形,它将按预期工作!对答案进行编辑要比同意我是正确的更有成效@AndrewThompson我会的,我正在使用stackoverflow移动应用程序。给一个小时:-)