21

さて、ボタン (またはクリック可能なもの) の背景として配置したい画像があります。問題は、この画像が丸いことです。そのため、この画像を境界線などなしで表示する必要があります.

このボタンを保持する JComponent にはカスタムの背景があるため、ボタンは実際には画像のみを表示する必要があります。

Googleで検索した後、どうにかできませんでした。私は次のすべてを試しましたが、うまくいきませんでした:

button.setBorderPainted(false);
button.setContentAreaFilled(false);
button.setOpaque(true);

そして、背景にアイコンをペイントした後、ボタンはそれをペイントしますが、境界線などで醜い灰色の背景を保持します.JLabelとJButtonも使用しようとしました. それに ImageIcon を描画しますが、ユーザーがウィンドウのサイズを変更または最小化すると、アイコンが消えます!

どうすればこれを修正できますか?

画像をペイントして JComponent に丸め、クリックをリッスンするだけです...

4

8 に答える 8

24

新しい Jbutton を作成します。

    JButton addBtn = new JButton("+");
    addBtn.setBounds(x_pos, y_pos, 30, 25);
    addBtn.setBorder(new RoundedBorder(10)); //10 is the radius
    addBtn.setForeground(Color.BLUE);

JButton の境界線を設定するときに、オーバーライドされたjavax.swing.border.Borderクラスを呼び出します。

addBtn.setBorder(new RoundedBorder(10));

クラスはこちら

private static class RoundedBorder implements Border {

    private int radius;


    RoundedBorder(int radius) {
        this.radius = radius;
    }


    public Insets getBorderInsets(Component c) {
        return new Insets(this.radius+1, this.radius+1, this.radius+2, this.radius);
    }


    public boolean isBorderOpaque() {
        return true;
    }


    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
        g.drawRoundRect(x, y, width-1, height-1, radius, radius);
    }
}
于 2010-09-03T09:27:13.153 に答える
14

次のことを試しましたか?

button.setOpaque(false);
button.setFocusPainted(false);
button.setBorderPainted(false);
button.setContentAreaFilled(false);
setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); // Especially important

setBorder(null)動作する可能性がありますが、クライアントがインターフェースを実装しない非 null 境界線を設定しない限り、UI がコンポーネントに境界線を設定するのは設計によるものであるとSun で説明されているバグUIResourceがあります。

EmptyBordernull が渡されたときに JDK 自体が境界線を に設定するのではなく、クライアントはEmptyBorder自身で を設定する必要があります (非常に簡単な回避策)。そうすれば、コード内で誰が何をしているのかについて混乱することはありません。

于 2009-01-08T12:32:06.147 に答える
1
  1. 通常のボタンをパネルにドラッグします

  2. ボタンを右クリックして、プロパティに移動します。

border              = no border
border painted      = false
contentAreaFilled   = false
focusPainted        = false
opaque              = false
  1. プロジェクトにインポートして (icon) と (rolloverIcon) を設定します。
于 2013-04-09T10:43:55.630 に答える
1

次のように paint(Graphics g) メソッドをオーバーライドすることをお勧めします。

class JImageButton extends JComponent implements MouseListener {
    private BufferedImage img = null;

    public JImageButton(BufferedImage img) {
        this.img = img;
        setMinimumSize(new Dimension(img.getWidth(), img.getHeight()));
        setOpaque(false);
        addMouseListener(this);
    }

    public void paintComponent(Graphics g) {
        g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), null);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void mousePressed(MouseEvent e) {
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }
}
于 2009-01-08T19:10:43.830 に答える
0

不透明度はfalseに設定する必要があるため、

button.setOpaque(false);

すでにあなたが望むものである可能性があります。

于 2009-01-08T11:29:24.713 に答える
-1

次のように、ボタンに空の境界線を作成できます。

button.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
于 2016-08-10T04:42:44.513 に答える