0

ここに画像の説明を入力

半透明のウィンドウを作成する方法は知っていますが、完全を期すためにそれを含めました。
今ここに私がやろうとしていることがあります....

不透明度 60% の装飾されていない JFrame を作成する

ソフトウィンドウエッジ。

上の画像を参照すると、エッジがシャープで明確に定義されていることがわかります。柔らかくしたい

角丸長方形にします。

を使用して形状を指定できますが、角丸長方形AWTUtilities.setWindowShape(Window,Shape)を作成する方法を知りたいと思っていました。

背景として使用する BufferedImage の反射を作成します

なぜPhotoshopを使わないのですか?あなたは尋ねるかもしれませんが、背景として使用しようとするすべての画像の反射を作成するのは面倒です. 代わりに、プログラムによる次の方法があるかどうか疑問に思っていました。

  • 取るBufferedImage
  • 縦にひっくり返します。言い換えれば、逆さまです。
  • 不透明度を希望の値に変更します
  • のサイズをJFrame元のバッファ イメージの 2 倍に設定します
  • ヘルプ!!!


    import java.awt.*;
    import java.awt.geom.AffineTransform;
    import java.awt.image.BufferedImage;
    import javax.swing.*;
    public class ImageReflection extends JFrame{
        public ImageReflection(){
            ImageIcon baseIcon = new ImageIcon("src/images/mentalist-logo.png");
            ImageIcon reflectIcon = new ImageIcon("src/images/mentalist-logo.png");
            JLabel baseLabel = new JLabel(baseIcon);
            JLabel reflectLabel = new JLabel();
    
            Graphics2D g2D = (Graphics2D) reflectIcon.getImage().getGraphics();
            g2D.rotate(180);
            reflectLabel.setIcon(reflectIcon);
    
    
            this.add(reflectLabel);
            this.setVisible(true);
            this.pack();
    
        }
        public static void main(String[] args) {
            new ImageReflection();
        }
    }
    

    私はで取得UnsupportedOperationExceptionGraphics2D g2D = (Graphics2D) reflectIcon.getImage().getGraphics();ます。
    これは、画像を上下逆にする私のコードです。

    4

    2 に答える 2

    3

    残っているのは、反射を作成することです。

    AffineTransform次のようにグラフィック コンテキストを変更できます。

    BufferedImage newImage = new BufferedImage(
        oldImage.getWidth(), oldImage.getHeight, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = newImage.createGraphics();
    g2d.translate(0, newImage.getHeight());
    g2d.scale(1, -1);
    g2d.drawImage(oldImage, 0, 0, null);
    g2d.dispose();
    
    于 2012-12-27T20:13:42.657 に答える
    2

    おそらく、このようなことを試すことができます(すべてではないにしても、いくつかの助けになるかもしれません)、これは私が以前に試したことです:

    final JWindow initWindow = new JWindow();
    SwingWorker<Object, Object> task = new SwingWorker<Object, Object>()
                {
            public Object doInBackground() 
            {
                //show init window
                //....
                initWindow.getContentPane().add(text);
    
               ( (JComponent) initWindow.getContentPane ( ) ).setBorder(new CompoundBorder(new CustomRoundedBorder(), new LineBorder(new Color(...)));
    
               AWTUtilities.setWindowOpaque ( initWindow, false );
    
               initWindow.setAlwaysOnTop(true);
    
               initWindow.setVisible(true);
                 //....
                return null;
            }
            public void done() 
            {
            }
        };
        task.execute();
    
    于 2012-12-27T13:26:08.253 に答える