トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

Javaで透明、非矩形フレーム

http://itpro.nikkeibp.co.jp/article/COLUMN/20111222/377256/

透明フレームをサポートしているかチェックする

       GraphicsEnvironment env = 
           GraphicsEnvironment.getLocalGraphicsEnvironment();
       GraphicsDevice device = env.getDefaultScreenDevice();

       // 透明フレームをサポートとしているかチェックする
       if (!device.isWindowTranslucencySupported(WindowTranslucency.TRANSLUCENT)) {
           System.err.println("Don't Support Translucent Frame");
           return;
       }

半透明のフレームを表示させる

       JFrame frame = new JFrame();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setSize(400, 300);

       // タイトルバーを表示しない
       frame.setUndecorated(true);

       // 透明度を設定
       frame.setOpacity(0.5f);

       JLabel label = new JLabel("Translucent Frame!", JLabel.CENTER);
       label.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 24));
       frame.add(label);

       frame.setVisible(true);


透明フレームに非透明のコンポーネントを表示させる

       JFrame frame = new JFrame();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setSize(400, 300);

       // タイトルバーを表示しない
       frame.setUndecorated(true);

       // フレームを透明にする
       frame.setBackground(new Color(0, 0, 0, 0));

       // 背景色が透明色から非透明色にグラデーションするパネル
       JPanel panel = new JPanel() {
           @Override
           protected void paintComponent(Graphics g) {
               Graphics2D g2d = (Graphics2D)g;
               
               Color start = new Color(240, 240, 240, 0);
               Color end = new Color(240, 240, 255, 255);
                   
               // グラデーションでペイントする
               Paint paint = new GradientPaint(0.0f, 0.0f, start,
                                               0.0f, getHeight(), end);
               g2d.setPaint(paint);
               g2d.fillRect(0, 0, getWidth(), getHeight());
           }
       };
       panel.setLayout(new BorderLayout());
       frame.add(panel);

       // 非透明のラベル
       JLabel label = new JLabel("Gradient Painted  Frame!", JLabel.CENTER);
       label.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 24));
       panel.add(label);

       frame.setVisible(true);

非矩形フレーム

       JFrame frame = new JFrame();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setBounds(new Rectangle(200, 100, 400, 300));

       // タイトルバーを表示しない
       frame.setUndecorated(true);

       // シェイプを設定
       Shape shape = new RoundRectangle2D.Float(0, 0, 400, 300, 40, 40);
       frame.setShape(shape);

       JLabel label = new JLabel("Non-Rectangle Frame!", JLabel.CENTER);
       label.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 24));
       frame.add(label);

       frame.setVisible(true);
[カテゴリ: プログラミング言語 > Java]

[通知用URL]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2012年01月20日 22時49分41秒