我现在有两个问题:
1. 我新建了一个MyJFrame继承JFrame  然后又新建了一个MyJPanel 继承JPanel  
     public MyJFrame()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new MyJPanel();    //新建的JPanel
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}
但是我在JPanel中托了几个JRadioButton  但是一运行却看不见那几个按钮
但是可以在这个面板上画东西 画的问题出现了 看下2.  我想画个拖拽的椭圆,能看的到时时变化的那种 我用变量记录了 mousePressed   mouseDragged  然后在mouseDragged里加了  repaint();
protected void paintComponent(Graphics g) {
g.setXORMode(Color.gray);  
switch(state)
{
case 1:
g.drawRect(sx, sy, ex - sx, ey - sy);
break;
case 2:
g.drawOval(sx, sy, ex - sx, ey - sy);
break;
default:
break;
}

}
    可以画出东西来  但是问题可能出现在异或上,我发现比如画的椭圆,本来就是线框,只有在相交的地方有异或,中间的地方没有,要怎么解决:

解决方案 »

  1.   

    问题1,没看懂,你是怎么把按钮加到布局上的?问题2,如果要画实心的,需要用fillOval而不是drawOval
      

  2.   

    1
    因为重写了paintComponent方法,而该方法没有实现画按钮,所以按钮丢失,在paintComponent的开始调用一下super(g);来让父类完成相关控件的绘画
    protected void paintComponent(Graphics g) {
        super(g); //here
         g.setXORMode(Color.gray);  2
    图片看不到,不清楚LZ所说的问题
      

  3.   

    2: 因为画的椭圆它不是实心的,线框,所有拖动的过程中会有N多个椭圆画出来,但是它们相交的地方只是由小变到大的线圈的地方,这样就会产生一个最终的大椭圆套N多个小椭圆(大圆中间的部分是不会发生异或的)奇怪了 加了你说的第二个错误解决了  就是第一个问题还没有, 按钮还是没有显示
    比如这个
    JRadioButton radioButton_3 = new JRadioButton("\u77E9\u5F62");
    radioButton_3.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    // 选择画圆
    state = 1; }
    });
    add(radioButton_3);
    这里的代码在MyJPanel的构造函数中,add就是把这个东西添加到面板中,而在JFrame中我new了一个这个面板
    contentPane = new MyJPanel();    //新建的JPanel   
    就是不错来  不知道问题在哪儿?
      

  4.   

    你的panel的布局方式是什么?radioButton_3的尺寸大小,位置有什么设置了吗?
      

  5.   


    布局是flow的  尺寸好像我没动  就我拖上去的我重写了一个,就是没有新建一个panel  直接就用Jframe的那个  
    我现在可以拖动画椭圆了,就是拖动的过程中,感觉效果不连续   一闪一闪的  是什么原因  我重写的是paint
    //-------------------
    @Override
    public void paint(Graphics g)
    {
    super.paint(g);
    switch (color)
    {
    case 1:
    g.setXORMode(Color.gray);
    break;
    case 2:
    g.setXORMode(Color.GREEN);
    break;
    case 3:
    g.setXORMode(Color.BLUE);
    break;
    default:
    break;
    }

    switch (draw)
    {
    case 0:
    g.drawRect(sx, sy, ex - sx, ey - sy);
    break;
    case 1:

    break;
    case 2:
    g.drawOval(sx, sy, ex - sx, ey - sy);
    break;
    case 3:
    g.drawLine(sx, sy, ex, ey);
    break;
    default:
    break;
    }
    }画出来的颜色也不对