我在frame里添加了两个自定义的按钮,用的是FlowLayout布局管理方式,可是两个按钮出现重叠了,怎么办?

解决方案 »

  1.   


    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.Graphics;
    import java.awt.FlowLayout;
    import java.awt.FontMetrics;
    public class Exercise3 extends JFrame
    {

        public static void main(String[] args)
       {
          Exercise3 frame = new Exercise3();
          frame.setTitle("Exercise 3");
          frame.setSize(300,120);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.getContentPane().setLayout(new FlowLayout());
          OvalButton button1 = new OvalButton("OK");
          frame.add(button1);
          OvalButton button2 = new OvalButton("Cancel");
          frame.add(button2);
          frame.setVisible(true);
      }
    }class OvalButton extends JButton
    {
        //data field
         private  String text;
         private int OvalWidth = 130;
         private int OvalHeight = 60;

        //method field 
        public OvalButton()
       {
          this.text = "默认";
       }

       public OvalButton(String text)
       {
          this.text = text;
       }

       public void setOvalSize(int width,int height)
       {
          OvalWidth = width;
          OvalHeight = height;
       }

       protected void paintComponent(Graphics g)
       {
           super.paintComponent(g);
          
           FontMetrics fm = g.getFontMetrics();
           int xOfText = getWidth() / 2 - fm.stringWidth(text) / 2;
           int yOfText = getHeight() / 2 + fm.getAscent() / 2;
           this.setSize(OvalWidth + 20,OvalHeight + 20);
     g.drawOval((int)(0.08 * getWidth()),(int)(0.1 * getHeight()), OvalWidth,OvalHeight);
           g.drawString(text,xOfText,yOfText);
       }

      

  2.   

    用GridLayout布局管理不会重叠,但那样按钮与frame顶端就不会留出空隙,我想留出空隙,不知道怎么办
      

  3.   

    用GridLayout布局管理不会重叠,但那样按钮与frame顶端就不会留出空隙,我想留出空隙,不知道怎么办
      

  4.   

    setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
      

  5.   

    改几个地方1 
    frame.setSize(300,120);frame.setSize(400, 120);2
    this.setSize(OvalWidth + 20, OvalHeight + 20);
    this.setPreferredSize( new Dimension( OvalWidth + 20, OvalHeight +20));
    3
    添加了
    this.updateUI();
    import java.awt.Dimension;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.Graphics;
    import java.awt.FlowLayout;
    import java.awt.FontMetrics;public class Exercise extends JFrame {    public static void main(String[] args) {
            Exercise frame = new Exercise();
            frame.setTitle("Exercise 3");
            frame.setSize(400, 120);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setLayout(new FlowLayout());
            OvalButton button1 = new OvalButton("OK");
            frame.add(button1);
            OvalButton button2 = new OvalButton("Cancel");
            frame.add(button2);
            frame.setVisible(true);
        }
    }class OvalButton extends JButton {
        //data field    private String text;
        private int OvalWidth = 130;
        private int OvalHeight = 60;    //method field
        public OvalButton() {
            this.text = "默认";
        }    public OvalButton(String text) {
            this.text = text;
        }    public void setOvalSize(int width, int height) {
            OvalWidth = width;
            OvalHeight = height;
        }    protected void paintComponent(Graphics g) {
            super.paintComponent(g);        FontMetrics fm = g.getFontMetrics();
            int xOfText = getWidth() / 2 - fm.stringWidth(text) / 2;
            int yOfText = getHeight() / 2 + fm.getAscent() / 2;
            this.setPreferredSize( new Dimension( OvalWidth + 20, OvalHeight + 20));//this.setSize(OvalWidth + 20, OvalHeight + 20);
            g.drawOval((int) (0.08 * getWidth()), (int) (0.1 * getHeight()), OvalWidth, OvalHeight);
            g.drawString(text, xOfText, yOfText);
            this.updateUI();
        }
    }