89217


**少し急ぎなので[こちら](https://stackoverflow.com/questions/72496865/add-decorations-
to-jlabel-and-create-buttons-in-javaswing)にマルチポストさせていただいています。**

現在、`JavaSwing`でGUI開発を行っております。  
そこで`getContentPane()`に追加された`JButton`で、後述する`HTML`コードのような`button`を作成していますがやり方がわからず、行き詰まっています。

* * *

**現在のコード：**

[code]

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Main {
      public static void main(String[] args) {
    
        JFrame frame = new JFrame();
        frame.setTitle("TITLE");
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1000, 800);
        frame.getContentPane().setLayout(new FlowLayout());
    
        JButton button = new JButton("Click Here");
        frame.getContentPane().add(button);
        button.setBackground(Color.RED);
        button.setForeground(Color.WHITE);
        button.setOpaque(true);
        button.setPreferredSize(new Dimension(150, 50));
    
        }
    
      }
    
[/code]

* * *

私の作ろうとしている実体が口では少し説明しづらいので、`HTML`を使い私が作ろうとしている物を再現してみました。以下のようなものです。

* * *

**HTMLコード：**

[code]

    <div class="btn">Click Here</div>
    
    <style>
    .btn {
      background-color: red;
      display: inline-block;
      height: 70px;
      width: 150px;
      text-align: center;
      color: white;
      padding-top: 35px;
      font-size: 25px;
      border-radius: 50px;
      box-shadow: 0px 5px #b70d0b;
      opacity: 0.7;
      cursor: pointer;
    }
      .btn:hover {
        opacity: 1;
      }
      .btn:active{
        position: relative;
        top: 5px;
        box-shadow: none;
      }
    </style>
    
[/code]

実行するとこんな感じになります。以下の画像が`JavaSwing`での私の理想です。

[![理想btn画像](https://i.stack.imgur.com/gub6n.png)](https://i.stack.imgur.com/gub6n.png)

今回の質問内容は、

  * `JavaSwing`で`JButton`に`opacity`をセットすること

  * `button`に`border-radius`をセットすること

  * `button`にマウスがホバーしているのを`MouseEvent`で感知し、ホバー間だけ`opacity`を1にすること

  * `box-shadow`を`5px`にセットし、`active`の間を`ActionListener`で感知し、ボタンが押されているような演出を作ること

  * `button`にマウスがホバーしている間に`cursor:pointer`コードを再現すること

です。質問の内容が多すぎることは十分自覚していますので、答えられるところだけを答えてくれると嬉しいです。

一応質問内容のことは私なりにGoogleで調べてみましたが、どれも私の理想にしっくり来ず、ここで質問させていただきました。

* * *

**自分がやったこととしては以下の感じです：**

  * `opacity`の件は[こちら](https://www.javadrive.jp/tutorial/jbutton/index2.html)で非透明/透明のセットの仕方がありましたが、私は`opacity`に **値を** セットしようとしているので、私の求めていたものではありませんでした。  
他にも[こちら](https://www.codegrepper.com/code-
examples/java/how+do+I+change+the+opacity+of+a+JButton)も見てみましたが、`setOpacity(0.5)`のように小数点で入力すると`setOpacity(double)
is undefined`とエラーが出てしまいます。

  * `border-radius`の件は[こちら](https://stackoverflow.com/questions/15025092/border-with-rounded-corners-transparency)を参考にさせていただきましたが、実行しても何も起こりませんでした。おそらく私の書き方かバージョン(?)に問題があるのだと思いますが、原因を突き止めることが出来ませんでした。

  * ホバーの`MouseEvent`は[こちら](https://stackoverflow.com/questions/25393134/how-to-get-mouse-hover-event-in-java-swing)をコピーしてみましたが、バージョンが違うのか、エラーが起きてしまいました。

* * *

というわけで、私が質問している内容を実現するにはどの様なコードを書けば良いのでしょうか？  
ご教授いただけると嬉しいです。


CC BY-SA 4.0
2022-06-03T18:58:20.390
89214
2022-06-04T04:40:01.787
2022-06-04T03:53:38.450
51596
51596
question
java
JButtonに細かいデコレーションを装飾していき、キレイなボタンを作りたい


**自己解決しました。**  
[こちら](https://stackoverflow.com/questions/72496865/add-decorations-in-
jbutton/72497080#72497080)で回答をいただき、求めているものを作ることが出来ました。

`ActionListener`で`JButton`に色々追加するには簡単な道はなく、自分で`JButton`のクラスを追加しなければいけないようでした。  
また、`hover`やその他の件も`awt.Graphics`を使うことにより解決しました。


CC BY-SA 4.0
2022-06-04T04:40:01.787
89217
2022-06-04T04:40:01.787
51596
89214
answer