1

いくつかの単純な形状を含む JFrame があります。それらは Ellipse2D です。(240, 240)寸法内のオブジェクトにぴったり合うようにフレームのサイズを変更したい

JFrame をパックすると、含まれるオブジェクトのサイズではなく、最小ウィンドウ サイズにサイズ変更されます。

また、JFrame で使用するsetSize(240, 240)と、含まれるオブジェクトのサイズではなく、外部ウィンドウのサイズが設定されるため、Windows UI は含まれる Graphics2D オブジェクトの半分をカバーします。

含まれている Graphics2D オブジェクトのサイズに対して JFrame のサイズを変更するにはどうすればよいですか。setPreferredSize()彼らはこれを奇妙に複雑にする方法を持っていないようです。

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

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

    public class GUIMain extends JPanel{

        private int maxwidth = 240;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(maxwidth, maxwidth);
        }

        @Override
        public void paintComponent( Graphics g )
        {
            Graphics2D g2d = (Graphics2D) g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            float i;
            float imax = 4;
            Ellipse2D.Double circle = new Ellipse2D.Double();

            for( i = imax; i > 0; i--){
                circle.width = (int)maxwidth*(i/imax);
                circle.height = (int)maxwidth*(i/imax);
                circle.x = (maxwidth/2)-(circle.width/2);
                circle.y = (maxwidth/2)-(circle.width/2);

                if((i % 2) == 0){
                    g2d.setColor(Color.red);
                }else{
                    g2d.setColor(Color.blue);
                }
                g2d.fill(circle);
            }
        }

        public static void main(String[] args) {

            JFrame frame = new JFrame("Lame...");
            frame.add(new GUIMain());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //frame.setSize(maxwidth, maxwidth);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
            frame.setResizable(false);
        }

    }

編集:わかりました、上記のようにコードを修正しました。ウィンドウの右側に 12px の下部にパディングが表示されることを除いて。このように見えます。

http://i.imgur.com/Ilp39.jpg

4

1 に答える 1

4

Ellipse2D オブジェクトを JFrame で直接描画するのではなく、paintComponenet(...)JFrame が表示する JPanel のメソッドで描画している可能性があります。getPreferredSize()すべての楕円を表示できるディメンションを計算して返すように、この JPanelの をオーバーライドする必要があります。

于 2012-05-11T03:47:17.093 に答える