gpt4 book ai didi

窗口中的 Java JFrame 矩形

转载 作者:行者123 更新时间:2023-12-01 20:00:05 25 4
gpt4 key购买 nike

所以我尝试使用 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);
}
}

最佳答案

您似乎对 Swing 中绘画的工作方式存在误解。

首先查看Performing Custom Painting , Painting in Swing2D GraphicsRectangle2D是一个图形基元,需要通过正常的自定义绘制过程进行绘制

根据Performing Custom Painting的共同建议您应该重写 Plansza85paintComponent 方法,并通过 Graphics2D API 绘制 Shape,例如...... .

Painted

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {

public static void main(String[] args) {
new Test();
}

public Test() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
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.add(p);
jf.pack();
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
});
}

class Plansza85 extends JPanel {

Shape figura;

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

@Override
public Dimension getPreferredSize() {
if (figura == null) {
return super.getPreferredSize();
}
Rectangle2D bounds = figura.getBounds2D();
double width = bounds.getMaxX();
double height = bounds.getMaxY();

return new Dimension((int)width + 1, (int)height + 1);
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(getForeground());
g2d.draw(figura);
g2d.dispose();
}
}
}

例如。

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

,它们将改变面板的大小

关于窗口中的 Java JFrame 矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48311193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com