想画一个圆。有两个JPanel,jp添加了两个JButton,想在show上画圆。现在不能画出圆来。觉得从那里看过,画的圆被show覆盖,可是repaint()以后还是不行
但是如果利用/**/当中部分,既把画圆做成类,做成底层JPanel,就可以。可是不想这样子
按现在这代码应该怎样修改那import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Clock1{
  public static void main(String[] args){
    ClockFrame frame=new ClockFrame();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}
class ClockFrame extends JFrame{
  ClockPanel panel=new ClockPanel();
  public ClockFrame(){
    setTitle("clock");  
    setSize(200,200);
    add(panel);
  }
}
class ClockPanel extends JPanel{
  private JPanel jp=new JPanel();
  private JPanel show=new JPanel();
  /* private JPanel show=new JPanel(); */
  private JButton modify=new JButton("modify");
  private JButton ok=new JButton("ok");
  public ClockPanel(){
    setLayout(new BorderLayout());
    setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"clock"));
    show.setBackground(Color.RED);
    jp.add(ok);
    jp.add(modify);
    add(show);   
    jp.setLayout(new FlowLayout());
    add(jp,BorderLayout.NORTH);
    repaint();
  }
  public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawOval(60,60,100,100);
  }}
/*
class DrawPanel1 extends JPanel{
  public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawOval(60,60,100,100);
  }
}*/

解决方案 »

  1.   

    你原来画的原是被show这个面板给盖住了,其实将show这个面板去掉就可以了,这里给你贴一个能看到表盘的实例import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    public class Clock1{
      public static void main(String[] args){
        ClockFrame frame=new ClockFrame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
    }
    class ClockFrame extends JFrame{
      ClockPanel panel=new ClockPanel();
      public ClockFrame(){
        setTitle("clock");
        setSize(200,200);
        this.getContentPane().add(panel);
    //    add(panel);
        this.repaint(); 
      }
    }
    class ClockPanel extends JPanel{
      private JPanel jp=new JPanel();
    //  private JPanel show=new JPanel();
      /* private JPanel show=new JPanel(); */
      private JButton modify=new JButton("modify");
      private JButton ok=new JButton("ok");
      public ClockPanel(){
        setLayout(new BorderLayout());
        setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"clock"));
        setBackground(Color.RED);
        jp.add(ok);
        jp.add(modify);
    //    add(show);
        jp.setLayout(new FlowLayout());
        add(jp,BorderLayout.NORTH);
    //    repaint();
      }
        
      @Override
      public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawOval(60,60,100,100);
        System.out.println("-----paintComponent------");
      }}
      

  2.   

    this.getContentPane().add(panel);
    这句要代替add(panel)
      

  3.   

    最初需要显得到内容窗格contentPane。后来发现脑子转不过来的人太多,Sun就让可以使用add直接添加组件了。import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    public class Clock{
        public static void main(String[] args){
            java.awt.EventQueue.invokeLater(new Runnable(){
                    @Override public void run(){
                        JFrame frame=new JFrame("Clock");
                        frame.setSize(200,200);
                        frame.add(new ClockPanel());
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        frame.setVisible(true);
                    }
                });
        }
        static class ClockPanel extends JPanel{
            private JPanel jp=new JPanel();
            private JButton modify=new JButton("modify");
            private JButton ok=new JButton("ok");
            public ClockPanel(){
                super(new BorderLayout());
                setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Clock"));
                setBackground(Color.RED);
                jp.add(ok);
                jp.add(modify);
                jp.setOpaque(false);
                add(jp,BorderLayout.NORTH);
            }
            @Override public void paintComponent(Graphics g){
                super.paintComponent(g);
                g.drawOval(60,60,100,100);
                System.out.println("-----paintComponent------");
            }
        }
    }
      

  4.   

    这样子我知道,我也知道画图被show这个panel给覆盖了。我想知道怎么不被它覆盖,show这个panel也存在。我setBoard不是主要set的show,把按钮都放在了边界外。如果把不加show的画,那setBoard就是整个frame了。而且两个JButton也在这个边界里了
      

  5.   

    这样子我知道,我也知道画图被show这个panel给覆盖了。我想知道怎么不被它覆盖,show这个panel也存在。我setBoard不是主要set的show,把按钮都放在了边界外。如果把不加show的画,那setBoard就是整个frame了。而且两个JButton也在这个边界里了
      

  6.   

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import javax.swing.*;
    import javax.swing.border.*;import java.util.*;public class Clock{
        public static void main(String[] args){
            java.awt.EventQueue.invokeLater(new Runnable(){
                    @Override public void run(){
                        JFrame frame=new JFrame("Clock");
                        frame.setSize(400,400);
                        frame.add(new ClockPanel());
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        frame.setVisible(true);
                    }
                });
        }
        static class ClockPanel extends JPanel{
            private JPanel jp=new JPanel();
            private JButton modify=new JButton("modify");
            private JButton ok=new JButton("ok");
            private JPanel drawing = new DrawingPad();
            public ClockPanel(){
                super(new BorderLayout());
                setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Clock"));
                setBackground(Color.RED);
                jp.add(ok);
                jp.add(modify);
                jp.setOpaque(false);
                add(jp,BorderLayout.NORTH);
                // drawing.setOpaque(false);
                add(drawing,BorderLayout.CENTER);
            }
        }
        static class DrawingPad extends JPanel{        @Override public void paintComponent(Graphics g){
                super.paintComponent(g);
                Graphics2D g2d = (Graphics2D)g;
                g2d.setPaint(Color.BLACK);
                g2d.draw(new Ellipse2D.Double(60D,60D,100D,100D));
            }
        }
    }