ともさんのHP >プロブラミング >マウスでコンポーネントのサイズを変更する方法

マウスでコンポーネントのサイズを変更する方法

ウインドウの脇にリストを表示するSwingアプリを作っていますが、幅が狭いと文字が切れ、広いと画面が狭くなるので、 マウスで幅を調整できるようにプログラムを修正しました。
ネットで検索したけど参考になるページが見つからなかったので、変更方法の解説ページを作りました。参考にされてください。

広告

リスト幅調整

マウスでパネルの幅を変える

フレーム(SwingTest3)にパネル(panel)を左(WEST)に置いたシンプルなプログラムで説明します。
左の白い部分を広げたり狭くしたりするのをマウスを使って実現します。
Javaパネル幅幅調整

Javaコンポーネントサイズ調整

マウスを使うので、マウスイベントを使います。
イベントを利用するのは2つ。
①マウスがパネルの右端に移動したら、マウスカーソルを変更して、幅が変更できることを表示する。
②その位置でマウスをドラッグすると、ドラッグした位置までパネルの幅を広げる。

具体的な方法

①panel上でマウスが移動したら、mouseMovedのイベントを発生させる。
 panel上のマウスのx位置とパネルの幅を比較して、マウスが右端に位置していれば、
 マウスの形状を変更する。変更フラグをtrueにセットする。

   public void mouseMoved(MouseEvent e){
 //マウスの位置が要素パネルの右際であれば、habaflugをtrueに設定してマウスカーソルの形状を横両矢印にする
  int x = e.getX();
  int w = SwingTest3.this.panel.getWidth() - 5;
  //System.out.println(x+" "+w);
  SwingTest3.this.habaflug = false;
  e.getComponent().setCursor( new Cursor(Cursor.DEFAULT_CURSOR) );
  if( x>w ){
   e.getComponent().setCursor( new Cursor(Cursor.E_RESIZE_CURSOR) );
   SwingTest3.this.habaflug = true;
  }
 }

②panel上でマウスがドラッグされたら、mouseDraggedのイベントを発生させる。
 変更フラグがtrueならマウスの位置までパネルを広げて、repaintする。
 //habaflugがtureの時にマウスがドラッグされたら、パネルの幅を変更する
  public void mouseDragged(MouseEvent e){
   if( SwingTest3.this.habaflug ){
    int x = e.getX();
    //System.out.println("動いた "+x);
    //要素パネルの幅を変える
    SwingTest3.this.panel.setPreferredSize( new Dimension(x, SwingTest3.this.panel.getHeight() ) );
    SwingTest3.this.panel.revalidate();
    //再描画
    SwingTest3.this.repaint();
    SwingTest3.this.revalidate();
   }
  }
   

広告

プログラムのソース

全体は以下のようになります。
revalidate()を入れるのがコツ、というか、ここで引っかかるかと思います。


import javax.swing.Jframe;
import javax.swing.Jpanel;

import tomojavalib.p2cad.Frame;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
 * マウスでパネルの幅を変更するclass
 */
public class SwingTest3 extends Jframe {
//幅変更の許可フラグ
private boolean habaflug = false;
//幅を変更するパネル
private Jpanel panel = null;

/*コンストラクタ*/
public SwingTest3()
{
 //サイズ設定
 this.setBounds(50, 50, 400, 400);
 //パネル設定
 panel = new Jpanel();
 panel.setBackground(Color.WHITE);
 panel.setPreferredSize( new Dimension( 110,100 ) );
 //パネルの設置
 add( panel , BorderLayout.WEST );
 //イベントの設定
 this.setEvent();
}

/**
 * パネルの幅を調整するためのイベントを設定します
 */
private void setEvent()
{
this.panel.addMouseMotionListener(
new MouseAdapter(){
 public void mouseMoved(MouseEvent e){
 //マウスの位置が要素パネルの右際であれば、habaflugをtrueに設定してマウスカーソルの形状を横両矢印にする
  int x = e.getX();
  int w = SwingTest3.this.panel.getWidth() - 5;
  //System.out.println(x+" "+w);
  SwingTest3.this.habaflug = false;
  e.getComponent().setCursor( new Cursor(Cursor.DEFAULT_CURSOR) );
  if( x>w ){
   e.getComponent().setCursor( new Cursor(Cursor.E_RESIZE_CURSOR) );
   SwingTest3.this.habaflug = true;
  }
 }
 //habaflugがtureの時にマウスがドラッグされたら、パネルの幅を変更する
  public void mouseDragged(MouseEvent e){
   if( SwingTest3.this.habaflug ){
    int x = e.getX();
    //System.out.println("動いた "+x);
    //要素パネルの幅を変える
    SwingTest3.this.panel.setPreferredSize( new Dimension(x, SwingTest3.this.panel.getHeight() ) );
    SwingTest3.this.panel.revalidate();
    //再描画
    SwingTest3.this.repaint();
    SwingTest3.this.revalidate();
   }
  }
});
}

最終更新日: 2018-12-21 08:53:57

ともさんのHP >プロブラミング >マウスでコンポーネントのサイズを変更する方法

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます