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

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

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

広告

リスト幅調整

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

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

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

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

具体的な方法

@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;
  }
 }

Apanel上でマウスがドラッグされたら、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();
   }
  }
});
}

最終更新日: 2015-12-25 05:58:46

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

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

スリットカメラアプリケーション  
ゴアテックス生地の入手方法  
洗濯物干しハンガーの自作  
3次元CADで帽子の型紙  
【Java】画像の座標変換のためのクラス  
USBカメラをJAVAで制御して定点観測  
ミソハギの育てかた  
3次元CADでぬいぐるみ  
JavaFXのMeshViewに衝突判定を付加  
ニセアカシアの伐採  
小動物の飼いかた  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

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