添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
坏坏的茴香  ·  nginx ...·  3 月前    · 
忐忑的保温杯  ·  Import Procedure ...·  5 月前    · 

サンプルコード

Shape shape = new RoundRectangle2D.Float(0f, 0f, 240f, 64f, 32f, 32f);

JButton button2 = new JButton("not use Window#setShape(...)");
button2.addActionListener(e -> {
  JWindow window = new JWindow();
  window.setBackground(new Color(0x0, true));
  window.getContentPane().add(makePanel(shape));
  window.pack();
  window.setLocationRelativeTo(((AbstractButton) e.getSource()).getRootPane());
  window.setVisible(true);
});

// ...

private Component makePanel(Shape shape) {
  JPanel panel = new JPanel(new BorderLayout()) {
    @Override public Dimension getPreferredSize() {
      return shape.getBounds().getSize();
    }

    @Override protected void paintComponent(Graphics g) {
      Graphics2D g2 = (Graphics2D) g.create();
      g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, .5f));
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2.setPaint(Color.RED);
      g2.fill(shape);
      g2.dispose();
      super.paintComponent(g);
    }
  };
  panel.setOpaque(false);
  panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
  // ...
  return panel;
}
View in GitHub: Java , Kotlin
  • use Window#setShape(...)
    • JWindow の形状を Window#setShape(...) メソッドで切り抜いて変更
    • フチにジャギーが発生して滑らかにならない
    • 参考: Windowの形を変更
  • not use Window#setShape(...)
    • JWindow の背景色を JWindow#setBackground(new Color(0x0, true)) で完全に透明化
    • 内部の JPanel JPanel#setOpaque(false) で背景を描画しない、かつ JPanel#paintComponent(...) をオーバーライドして半透明のラウンド矩形を描画
    • Window#setShape(...) を使用しなくてもラウンド矩形の外側は完全に透明でマウスクリックなども無効になるので滑らかなフチの Shape で切り抜いた JWindow になる
    • 参考: JFrameの透明化と再描画
    • このサンプルでは画像を切り抜きする必要はないので、 Windowの縁をソフトクリッピングでなめらかにする のようなソフトクリッピング処理は不要

参考リンク

連絡先

ヘルプ

最新の10件