私は Java で JFrames を使用しています。具体的には、オーバーラップする必要がある絶対配置要素を使用しています。setOpacity(false);
コンポーネントをオーバーレイするには、JPanel ( with ) を作成し、それをsetBounds(x,y,x2,y2);
またはsetPosition(x,y)
&で配置する必要があることを理解していますsetSize(x,y)
。残念ながら、パネルは CSS のように動作しinline-divs
ます。それらはライン上で必要な量のスペースのみを占有し、スタックしません。
これは私がこれまでに持っているコードですが、私が想像するように動作していないようです:
class Login extends JFrame {
private JPanel backgroundpanel;
private JPanel panel;
private JPanel panel2;
private JTextField usernameBox;
private JPasswordField passwordBox;
private JButton button;
private int height = 319;
private int width = 452;
private ImageIcon ii = new ImageIcon("special-window-BG.png");
private JLabel image;
public Login() {
setLayout(null);
setTitle("Login");
setSize(width,height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
buildPanel();
add(backgroundpanel);
setVisible(true);
}
private void buildPanel() {
usernameBox = new JTextField(20);
passwordBox = new JPasswordField(20);
button = new JButton("Login");
image = new JLabel(ii);
backgroundpanel = new JPanel();
panel = new JPanel();
panel2 = new JPanel();
backgroundpanel.add(panel);
backgroundpanel.add(panel2);
backgroundpanel.add(image);
panel.setBackground(Color.red);
panel.setBounds(0, 0, 10, 10);
panel.setOpaque(false);
panel2.setBackground(Color.blue);
panel2.setBounds(0, 0, 10, 10);
panel2.setOpaque(false);
panel.add(passwordBox);
panel2.add(button);
backgroundpanel.setOpaque(false);
backgroundpanel.isOptimizedDrawingEnabled();
backgroundpanel.setBounds(0, 0, width, height);
...cot'd、しかし不要です。
したがって、基本的には、JPanel (またはそれが簡単な場合は JComponents) を背景画像付きの JPanel の上に絶対に配置する方法を知りたいと思います。
この質問を見てくれてありがとう、私はこの方法にあまりにも多くの時間を費やしました。コメントアウトされたコードは、私が投稿したものよりも 500 行近くも拡張されているため、他に参照する場所がありません。下の画像は、私が達成しようとしていることの大まかな図を示しています。JComponents が背景画像の背後にあるかのように消えることがあるため、実際にまだ取得に近づいているかどうかはわかりませんが、目の前にありそうなシンプルな解決策を見つけたい!