2

私は趣味で POS システム (POS) を書いています。POS システムの典型的な機能は、製品ごとに異なる背景色のボタンです。しかし、ボタンの画像の背後にある背景を意味するのではなく、このランダムな画像のように、Google 画像から取得したことを意味します。 ここに画像の説明を入力

編集:ルックアンドフィールをシステムのものに変更したことに注意してください

ボタンでそのようなことをする必要があります。私はこれが可能になるいくつかの方法を知っています:

  1. ボタンのルック アンド フィールを作成する
  2. 私のJButtonsでpaintComponenetメソッドを完全にオーバーライドします(しかし、それはそれを行うにはかなり哀れな方法です...そしてそれをオーバーライドするとボーダー+テキストは描画されません...明らかに悪い考えです)
  3. button.setContentAreaFilled(false); を使用し、ボタンの後ろにボタンと同じサイズの JPanel を配置します。

独自のルック アンド フィールを作成する方法がよくわかりません。特に 1 つのボタンだけを作成するのは苦痛のように思えます。また、ルック アンド フィールを壊すという話を聞いて、そのアイデアから遠ざかってしまいました。3番目の方法はもっともらしく聞こえますが、それほど難しくはありませんが、私がやろうとしていることを行うための最良の方法は何ですか?

現在、ボタンを作成するための私のコードは次のとおりです。

JButton b = new JButton(text);
    b.addActionListener(this);
    b.setFont(Main.f);
    b.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    buttons.add(b);
    return b;

私はこのコードをいじりました(主に楽しみのためであり、実用性ではありません):

JButton b = new JButton(text){
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            Color bg = getBackground();
            int borderchange = -50;
            g.setColor(new Color(
                    Math.max(0,bg.getRed()+borderchange),
                    Math.max(bg.getGreen()+borderchange,0),
                    Math.max(bg.getBlue()+borderchange,0)));
            g.fillRect(0,0,getWidth(),getHeight());
            g.setColor(getBackground());
            int border = 4;
            g.fillRect(border,border,getWidth()-border,getHeight()-border);
            g.setColor(Color.BLACK);
            g.setFont(getFont());
            g.drawString(getText(),getWidth()/2,getHeight()/2);
        }
    };
4

2 に答える 2

2
  • ボタンのルック アンド フィールを作成する

    1. ルックアンドフィールはテーマのようなもので、

    2. デフォルトでは、この ColorScheme には 1 つ、2 つ、3 つの色があり、このテーマはすべての Swing JComponent に適用されます。

    3. 次に、すべての Swing JComponents が同じ Color、ColorScheme を持っている

    4. あなたが探しているものではありません

  • 私のJButtonsでpaintComponenetメソッドを完全にオーバーライドします(しかし、それはそれを行うにはかなり哀れな方法です...そしてそれをオーバーライドするとボーダー+テキストは描画されません...明らかに悪い考えです)

    1. JButton には色の配列があります

    2. paintComponent をオーバーライドし、領域全体、Rectangle を 1 つの Color (探しているものではない) で塗りつぶすか、GradientPaint を使用することができます。

    3. BasicButtonUIをオーバーライドできます

    4. UIManager で適切なキーをオーバーライドし、そこに色の配列を配置します

  • button.setContentAreaFilled(false); を使用し、ボタンの後ろにボタンと同じサイズの JPanel を配置します。

    1. これは最も簡単な方法であり、アイコンを準備します(またはアイコンのセットをダウンロードします)

    2. 適切なメソッドを使用し、実装された (Mouse & Key & KeyBindings) イベント

于 2013-02-23T19:17:26.733 に答える
1

やってみました:

yourButton.setBackground(COLOR)

?

于 2013-02-23T17:15:30.667 に答える