ボタンをクリックすると、すでに表示されているJFrameにパネルが追加されます。これで、ユーザーがフレームのサイズを変更しても、パネルはその位置で一定のままになります。私が欲しいのは、パネルの位置もフレームのサイズ変更に合わせて調整する必要があるということです。それを行う方法はありますか?
問題を再生成するためのコード:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ProblemPanelLocation {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame frame = new JFrame("ProblemPanelLocation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250, 250);
final JPanel panel = new JPanel();
panel.setSize(100, 100);
panel.setBorder(BorderFactory.createBevelBorder(1));
final JButton button = new JButton("Add panel");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.setLocation(button.getX() - button.getWidth() - 10, button.getY());
frame.getLayeredPane().add(panel, JLayeredPane.MODAL_LAYER);
}
});
GroupLayout layout = new GroupLayout(frame.getContentPane());
frame.getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(317, Short.MAX_VALUE)
.addComponent(button)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(button)
.addContainerGap(266, Short.MAX_VALUE))
);
frame.setVisible(true);
}
});
}
}
シナリオ:
- 最初は、ボタンが入ったフレームが表示されます。
- それをクリックすると、パネルがフレームのレイヤードペインのフレームに追加されます。
- パネルの位置は、ボタンの位置に基づいて計算されます。
- フレームのサイズを変更すると、ボタンもフレームの右側に移動しますが、パネルは移動しません。
場所のボタンのように機能するようにパネルを追加したいと思います。出来ますか?はいの場合、どうすればそれを行うことができますか?