gpt4 book ai didi

java - 需要帮助理解 swing 代码中的意外输出

转载 作者:搜寻专家 更新时间:2023-11-01 02:29:24 25 4
gpt4 key购买 nike

我开发了一个应用程序来产生以下输出:- enter image description here

我重写了 JPanel 的 getPrefferredSize 但为什么我在更改大小时没有观察到输出中的任何变化。即使我将大小设置为 0,0,图表也根本没有翻译,我得到与所示相同的输出以上。

这是我的完整代码:-

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Skeleton extends JFrame{
Skeleton()
{
super("Donut");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);

add(new Board());
setVisible(true);
}
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable(){public void run(){new Skeleton();}});
}
}

class Board extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
RenderingHints rh=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//the following statement has no noticeable effect.
rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHints(rh);
Ellipse2D e=new Ellipse2D.Double(0, 0, 80, 130);
g2.setStroke(new BasicStroke(1));
g2.setColor(Color.RED);
for(int deg=0;deg<360;deg+=5)
{
AffineTransform at=AffineTransform.getTranslateInstance(getWidth()/2,getHeight()/2);
at.rotate(Math.toRadians(deg));
//returns a new Shape object after it has been undergone the 'at' transformation.
g2.draw(at.createTransformedShape(e));
}
}
public Dimension getPreferredSize()
{
return new Dimension(100,100);
}
}

最佳答案

因为你的布局管理器。默认情况下,BorderLayout 会忽略首选大小,但会填充所有可用空间。使用例如FlowLayout 和你会看到区别。

关于java - 需要帮助理解 swing 代码中的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196570/

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