代码之家  ›  专栏  ›  技术社区  ›  Crystal

简单框架和图形的帮助

  •  0
  • Crystal  · 技术社区  · 15 年前

    在作业中,我试图创建一个“自定义按钮”,它有一个框架,在这个框架中,我画了两个三角形,并在上面画了一个正方形。它应该能让用户在按下按钮时产生效果。所以对于初学者来说,我试图建立起开始的图形,绘制两个三角形和一个正方形。我的问题是,虽然我把我的框架设置为200,200,并且我画的三角形我认为我的框架大小的正确的结束,当我运行程序,我必须扩展我的窗口,使整个艺术品,我的“自定义按钮”,可查看。这是正常的吗?谢谢。

    代码:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    
    public class CustomButton
    {
        public static void main(String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    CustomButtonFrame frame = new CustomButtonFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                }
            });
        }
    }
    
    class CustomButtonFrame extends JFrame
    {
        // constructor for CustomButtonFrame
        public CustomButtonFrame()
        {
            setTitle("Custom Button");
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
            CustomButtonSetup buttonSetup = new CustomButtonSetup();
            this.add(buttonSetup);
        }
    
        private static final int DEFAULT_WIDTH = 200;
        private static final int DEFAULT_HEIGHT = 200;
    
    }
    
    class CustomButtonSetup extends JComponent
    {
        public void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D) g;
    
            // first triangle coords
            int x[] = new int[TRIANGLE_SIDES];
            int y[] = new int[TRIANGLE_SIDES];
            x[0] = 0;   y[0] = 0;
            x[1] = 200; y[1] = 0;
            x[2] = 0;   y[2] = 200;
            Polygon firstTriangle = new Polygon(x, y, TRIANGLE_SIDES);
    
            // second triangle coords
            x[0] = 0;   y[0] = 200;     
            x[1] = 200; y[1] = 200;
            x[2] = 200; y[2] = 0;
            Polygon secondTriangle = new Polygon(x, y, TRIANGLE_SIDES);
    
            g2.drawPolygon(firstTriangle);
            g2.setColor(Color.WHITE);
            g2.fillPolygon(firstTriangle);
    
            g2.drawPolygon(secondTriangle);
            g2.setColor(Color.GRAY);
            g2.fillPolygon(secondTriangle);
    
            // draw rectangle 10 pixels off border
            g2.drawRect(10, 10, 180, 180);
    
        }
        public static final int TRIANGLE_SIDES = 3;
    }
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   aioobe    10 年前

    尝试添加

    public dimension getPreferredSize()。{
    返回新尺寸(200、200);
    }
    < /代码> 
    
    

    到您的CustomButtonSetup类。.@p>

    然后再做

    settitle(“自定义按钮”);
    //设置大小(默认宽度,默认高度);
    customButtonSetup buttonsetup=new customButtonSetup();
    this.add(按钮设置);
    包();
    < /代码> 
    
    

    (来自api docs onpack()上的代码>:)

    < Buff行情>

    使此窗口大小适合其子组件的首选大小和布局。

    < /块引用>

    你应该得到这样的东西:

    到CustomButtonSetup类。

    然后做

        setTitle("Custom Button");
        //setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        CustomButtonSetup buttonSetup = new CustomButtonSetup();
        this.add(buttonSetup);
        pack();
    

    (来自API文档pack():)

    使此窗口大小适合其子组件的首选大小和布局。

    你应该得到如下信息:

    enter image description here

        2
  •  1
  •   polygenelubricants    15 年前

    这个 DEFAULT_WIDTH DEFAULT_HEIGHT 你设定的目标 整个框架 包括边框、窗口标题、图标等。它不是绘图画布本身的大小。因此,如果在200x200画布中绘制某些内容,则不一定适合包含该画布的200x200窗口。