4

次の出力を生成するアプリケーションを開発しました:- ここに画像の説明を入力

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);
}
}
4

1 に答える 1

5

レイアウトマネージャーのせいです。デフォルトでBorderLayoutは、優先サイズは無視されますが、使用可能なすべてのスペースが埋められます。egFlowLayoutと yu を使用すると、違いがわかります。

于 2012-11-02T14:03:21.240 に答える