如图上的jpanel翻转效果,并且翻转是面板一边高一边低

解决方案 »

  1.   

    将组件转成图片,还要变形之后再绘出
    首先要告诉你一点是,失真和锯齿是不可避免的
    而且可能还会相当严重
    效果可能不会很理想给你个以前我写的简单的组件变图片的例子吧
    这个界面上半部分是组件
    下半部分是这些组件变成图片后旋转了一定角度的效果import java.awt.Color;
    import java.awt.Container;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridLayout;
    import java.awt.RenderingHints;
    import java.awt.image.BufferedImage;import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class Component2Img extends JFrame {

    private JButton btn1;
    private JButton btn2;
    private JButton btn3;
    private JPanel pnlMain;
    private JPanel pnlTrans;
    private BufferedImage bufImg = null;

    public Component2Img() {
    initialize();
    }

    private void initialize() {
    this.setSize(400, 600);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);
    Container cont = this.getContentPane();
    cont.setLayout(new GridLayout(2,0));
    pnlMain = new JPanel();
    btn1 = new JButton("OK");
    btn2 = new JButton("Cancel");
    btn3 = new JButton("Exit");
    pnlMain.setLayout(null);
    btn1.setBounds(150, 50, 100, 30);
    btn2.setBounds(150, 100, 100, 30);
    btn3.setBounds(150, 150, 100, 30);
    pnlMain.setBorder(BorderFactory.createEtchedBorder());
    pnlMain.add(btn1);
    pnlMain.add(btn2);
    pnlMain.add(btn3);
    bufImg = createImage(pnlMain);
    pnlTrans = new JPanel() {
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(bufImg, 0, 0, null);
    }
    };
    cont.add(pnlMain);
    cont.add(pnlTrans);
    this.setVisible(true);
    bufImg = createImage(pnlMain);
    } public static BufferedImage createImage(JPanel panel) {
    BufferedImage panelImage = new BufferedImage(400, 300,
    BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D) panelImage.createGraphics();
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.WHITE);
    g2d.fillRect(0, 0, 400, 300);
    g2d.translate(-20, 40);
    double angleValue = Math.toRadians(-10);
    g2d.rotate(angleValue);

    panel.paint(g2d);
    g2d.dispose();
    return panelImage;
    }

    public static void main(String[] args) {
    new Component2Img();
    }
    }