単純なGUIですが、GUIを作成しています。ウィンドウ全体を背景画像(2048 X 2048)で埋め、左上の角に64 X 64の画像を時々ロードできるようにしたいです。手伝ってくれる人に感謝します:)編集:私はすでにJFrameをセットサイズにする方法を知っています。
これは、JFrameに背景画像を追加する簡単な例です。
import javax.swing.*;
import Java.awt.*;
import Java.awt.event.*;
class BackgroundImageJFrame extends JFrame
{
JButton b1;
JLabel l1;
public BackgroundImageJFrame()
{
setTitle("Background Color for JFrame");
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
/*
One way
-----------------
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png"));
add(background);
background.setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
background.add(l1);
background.add(b1);
*/
// Another way
setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png")));
setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
add(l1);
add(b1);
// Just for refresh :) Not optional!
setSize(399,399);
setSize(400,400);
}
public static void main(String args[])
{
new BackgroundImageJFrame();
}
}
画像を読み込む最良の方法は ImageIO
API を使用することです
BufferedImage img = ImageIO.read(new File("/path/to/some/image"));
画像を画面にレンダリングする方法はいくつかあります。
JLabel
を使用できます。とにかく画像を変更したくない場合、これは最も簡単な方法です...
JLabel background = new JLabel(new ImageIcon(img));
次に、必要に応じてウィンドウに追加します。コンポーネントを追加する必要がある場合は、ラベルのレイアウトマネージャーを必要なものに設定し、コンポーネントを追加するだけです。
ただし、より洗練されたものが必要な場合、何らかの方法で画像を変更する必要がある場合、または追加の効果を適用する場合は、カスタムペイントを使用する必要があります。
最初のケーブル:最上位のコンテナー(JFrame
など)に直接ペイントしないでください。トップレベルのコンテナはダブルバッファリングされないため、再描画と他のオブジェクトがウィンドウ上に住んでいる間に点滅する可能性があるため、ペイントプロセスの変更は面倒であり、他の問題を引き起こす可能性があり、フレームには可視領域内にレンダリングされる境界線があります窓の...
代わりに、JPanel
のようなものから拡張するカスタムコンポーネントを作成します。 paintComponent
メソッドをオーバーライドして、出力をレンダリングします。たとえば...
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, this);
}
詳細については、 カスタムペイントの実行 および 2Dグラフィックス をご覧ください。
@bottと非常によく似た方法を使用しましたが、画像のサイズを変更する必要がないように少し変更しました。
BufferedImage img = null;
try {
img = ImageIO.read(new File("image.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
Image dimg = img.getScaledInstance(800, 508, Image.SCALE_SMOOTH);
ImageIcon imageIcon = new ImageIcon(dimg);
setContentPane(new JLabel(imageIcon));
毎回動作します。 jFrameの幅と高さを取得し、それぞれ800と508の代わりに使用することもできます。
できるよ:
setContentPane(new JLabel(new ImageIcon("resources/taverna.jpg")));
Jframeクラスコンストラクターの最初の行で、それは私のためにうまく機能します