※ ChatGPTを利用し、要約された質問です(原文:ボーダー上か否かの判定について)
ボーダー上か否かの判定について
このQ&Aのポイント
パネルの外枠をドラッグ&ドロップすることで、外枠のサイズを変更することができます。
また、外枠以外のパネル部分をドラッグ&ドロップすることで、パネル全体の移動を行うことができます。
枠上か否かを判定する方法として、特定のポイントを基準に判断することができます。
いつもお世話になってます。
またお願いします。
画面上にパネルを配置して
パネルに外枠を設定します。
その内部にボタンを2つ配置しました。
この設定した外枠をドラッグ&ドロップすることで
パネル(外枠)のサイズを変更し、
外枠以外のパネル部分をドラッグ&ドロップすることで
ボタンや外枠含むを含むパネル全体の移動を行いたいのです。
★のところで枠上か否かを判定させれば良いのでしょうか?
それとも他に方法がありますでしょうか?
宜しくお願いいたします。
public class SampleButtonSize extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel jPanel = null;
private JButton jButton = null;
private JButton jButton1 = null;
public Point pMus;
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(null);
jPanel.setBounds(new Rectangle(30, 25, 205, 98));
jPanel.setBorder(new TitledBorder( new EtchedBorder(), "Power" ));
jPanel.add(getJButton(), null);
jPanel.add(getJButton1(), null);
jPanel.addMouseMotionListener(new java.awt.event.MouseMotionListener() {
public void mouseDragged(java.awt.event.MouseEvent e) {
if( ★ )
{ // 枠
pMus = jPanel.getLocation();
jPanel.setLocation(pMus.x + e.getX(), pMus.y + e.getY() );
}
else
{ // 枠以外
jPanel.setSize(e.getX(), e.getY() );
}
}
public void mouseMoved(java.awt.event.MouseEvent e) {
}
});
}
return jPanel;
}
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(16, 25, 82, 58));
}
return jButton;
}
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(115, 24, 77, 59));
}
return jButton1;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SampleButtonSize thisClass = new SampleButtonSize();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
public SampleButtonSize() {
super();
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJPanel(), null);
}
return jContentPane;
}
}
お礼
ありがとうございました。 Insets を使用すればいいのですね。 Insets で上下左右の枠のサイズが分かるので それとBorderを乗せたコンポーネントのサイズから 枠上か内部かの判定をすればいいようです。