Javaのアプレットについて質問です。
星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.Polygon;
public class Enshu1_5 extends Applet implements MouseListener
{
int px []={100,80,10,70,40,100,160,130,190,120};
int py []={10,75,75,113,190,140,190,113,75,75};
private Polygon poly = new Polygon(px,py,10 );
public void init()
{
addMouseListener(this);
}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillPolygon(poly);
g.setFont(new Font("serif",Font.BOLD,24));
g.drawString("Star",100,200);
}
}
こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで
if(e.getX()>x&&e.getY()>y)
{
int dx=e.getX()-x;
int dy=e.getY()-y;
x=dx;
y=dy;
poly.translate(dx,dy);
repaint();
}の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか?
教えて下さい><
お礼
ノードを大きくするのはDefaultTreeCellRendererのsetPreferredSizeとかMinimumSizeとかでサイズを設定すると出来たのですが、ノードを選択した際に背景の青も大きく表示されてしまったり横に広くなってスクロールバーが現れたり、、ちょっと出来なさそうだったのでその方法は諦めました。 もう一度JavaDocを見るとBasicTreeUIクラスに isLocationInExpandControl(TreePath path, int mouseX, int mouseY) というメソッドがありこれが正に+-ボタン領域かどうかを計算するメソッドでした。 ただprotectedで宣言されていたのでそのままでは使えず、迷った末にBasicTreeUIを拡張したMyTreeUIクラスを作って勝手にpublicメソッドに直して使いました。 またJTreeには指定したx,y座標に最も近いノードのパスを返すというメソッドもあったので最初より少しシンプルにできました^^ 半分諦めかけてましたが出来て良かったです。ありがとうございました。 class MyTreeUI extends BasicTreeUI { public boolean isLocationInExpandControlPublic(TreePath path, int mouseX, int mouseY) { return this.isLocationInExpandControl(path, mouseX, mouseY); } } ~~~ jTree.setUI( new MyTreeUI() ); jTree.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int mouseX = e.getX(); int mouseY = e.getY(); MyTreeUI treeUI = (MyTreeUI) jTree.getUI(); TreePath selectPath = jTree.getClosestPathForLocation(mouseX, mouseY); int treeHeight = jTree.getRowCount() * jTree.getRowHeight(); if (0 < mouseY && mouseY < treeHeight && !(treeUI.isLocationInExpandControlPublic(selectPath, mouseX, mouseY))) { jTree.setSelectionPath(selectPath); } if (SwingUtilities.isRightMouseButton(e)) { jPopupMenu.show(e.getComponent(), e.getX(), e.getY()); } } });