私は趣味で POS システム (POS) を書いています。POS システムの典型的な機能は、製品ごとに異なる背景色のボタンです。しかし、ボタンの画像の背後にある背景を意味するのではなく、このランダムな画像のように、Google 画像から取得したことを意味します。
編集:ルックアンドフィールをシステムのものに変更したことに注意してください
ボタンでそのようなことをする必要があります。私はこれが可能になるいくつかの方法を知っています:
- ボタンのルック アンド フィールを作成する
- 私のJButtonsでpaintComponenetメソッドを完全にオーバーライドします(しかし、それはそれを行うにはかなり哀れな方法です...そしてそれをオーバーライドするとボーダー+テキストは描画されません...明らかに悪い考えです)
- 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);
}
};