本帖最后由 qp2owj 于 2011-03-14 14:50:52 编辑

解决方案 »

  1.   

    你为什么要改变jpanel本身的形状呢? 写出来要实现什么, 大家才好帮你分析分析嘛
      

  2.   

    ?什么叫做点击这个panel???panel上面可以添加的事件监听你知道是什么么?如果是通过点击按钮而改变panel的话还可以实现,如下:
    class fram extends JFrame  implements  ActionListener {
    JButton jbt = new JButton("改变面板");
    JButton jbt2 = new JButton("恢复面板");
    JPanel pa = new JPanel();
    fram(){
    setLayout(null);
    pa.setBackground(Color.cyan);
    add(pa);

    add(jbt);
    jbt.setBounds(100,50,90,30);
    jbt.addActionListener(this); add(jbt2);
    jbt2.setBounds(100,105,90,30);
    jbt2.addActionListener(this);

    pa.setBounds(10,20,80,50);
    this.setVisible(true);
    this.setResizable(false);
    this.setBounds(420,320,500,500);
    }
    public void actionPerformed( ActionEvent e){
    if(e.getSource() == jbt){
    pa.setBounds(0,0,100,500);
    this.repaint();
    }
    else{
    pa.setBounds(10,20,80,50);
    this.repaint();
    }


    }
    }
      

  3.   

    自己写一个layoutManager 解决这个问题、
      

  4.   

    自己重写JPanel的paintComponent方法
    通过算法重绘其边框
    使之出现“变形效果”
    但是JPanel的底层事件是以矩形范围处理的
    就是说即使你用一个梯形的图片也好,自己重绘也好
    只是仅仅让这个JPanel看起来变了形而已,
    它的实际存在区域任然是一个矩形
    除非你重写JPanel的底层的一些东西不过这样对你的这个需求来说应该是够了
    如果楼主还想解决透明的问题
    建议用JLabel来代替JPanel
    这样只要在JLabel上放上你需要的形状的图片就OK了
    你想让它看起来像什么都可以
      

  5.   


    我知道你是什么意思了,现在不要用swing弄这些东西了,因为你工作后会发现有许多的东西,是基于javascript的一些类库,里面对于界面的设计很出色,到时候可以运用。顺便说一下,我以前对swing也很感兴趣,可是见了那些专门搞客户端的工具,发现用swing弄界面真的很不明智,swing也绝对不是java的精华所在