ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのテキストフィールドの移動

  • mixiチェック
  • このエントリーをはてなブックマークに追加
質問したいことがありネット上から使えそうなソースをいじってみたものです(;´Д`)
inTextに入力しエンターを押すことでinText2にマウスポインターを移動させたいのですが、どのようにすればよいでしょうか?

import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;

class ex12 extends JFrame{
static JTextField inText = new JTextField( "0", 11 );
static JTextField inText2 = new JTextField( "" );
static int total = 0;
static int max = Integer.MIN_VALUE;
static int min = Integer.MAX_VALUE;
static JTextField totalLabel = new JTextField("合計:");
static JTextField maxLabel = new JTextField("");;

public ex12(String s) {
super(s);
}

public static void main(String args[]) {

ex12 frame = new ex12("演習1");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container cont = frame.getContentPane();
cont.setLayout(null);
cont.setLayout(new GridLayout(5,1));

inText.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int arg1 = Integer.parseInt(inText.getText());
if(Math.abs(arg1)>999999999) {
maxLabel.setText( "ダメ" );
} else {
total += arg1;



if(Math.abs(total)>999999999) maxLabel.setText( "ダメ" );
else maxLabel.setText( "" );
totalLabel.setText( "合計:" + total );

}
}
});
cont.add(inText);
cont.add(inText2);
cont.add(totalLabel);
cont.add(maxLabel);

frame.pack();
frame.setVisible(true);
}
}

コメント(6)

やったこと無いんですが、

http://terai.xrea.jp/Swing/FocusTraversal.html
これでFocus順序の制御ができます。

Enterを押したときにFocusを次に進めるってのもできそうな気がします。

やってみるか〜
できたできた♪

って、マウスポインタは動かないですねw
やりたいことはこうかなぁと勝手に思ってましたが、、、
本当にマウスポインタ動かしたいんだったら
ちょっとひねらないとだめかも。まぁ、参考になれば。

import java.awt.AWTKeyStroke;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.FocusTraversalPolicy;
import java.awt.GridLayout;
import java.awt.KeyboardFocusManager;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

class TraversalTest extends JFrame {
private JTextField inText;

private JTextField inText2;

private JComponent[] order;

public TraversalTest(String s) {
super(s);
setLayout(new GridLayout(2, 1));

inText = new JTextField("0", 11);
inText2 = new JTextField("");

add(inText);
add(inText2);

// 順序付けするコンポーネントを配列に
order = new JComponent[] { inText, inText2 };

FocusTraversalPolicy policy = new FocusTraversalPolicy() {
java.util.List list = Arrays.asList(order);

public Component getFirstComponent(Container focusCycleRoot) {
return order[0];
}

public Component getLastComponent(Container focusCycleRoot) {
return order[order.length - 1];
}

public Component getComponentAfter(Container fcr, Component cmp) {
int index = list.indexOf(cmp);
return order[(index + 1) % order.length];
}

public Component getComponentBefore(Container fcr, Component cmp) {
int index = list.indexOf(cmp);
return order[(index - 1 + order.length) % order.length];
}

public Component getDefaultComponent(Container focusCycleRoot) {
return order[0];
}
};

setFocusTraversalPolicy(policy);
Set<AWTKeyStroke> keyset = new HashSet<AWTKeyStroke>();
keyset.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));
setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
keyset);

}

public static void main(String args[]) {

TraversalTest frame = new TraversalTest("Focus Travfersal Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 100, 80);

frame.setVisible(true);
}
}
しのぶさん、ありがとうございます。
説明の仕方が悪かったですね^^;
僕がしたかったのはまさにそれです。
フォーカス移動というのでしょうか?
それにしてもimport の数がすごいですね><

個人的に検索してみたのですが
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=26581&forum=12&2

こちらにaddActionListener() を使えばできるとの記述があるのですが、具体的にどのように記述すればよいかご存知ないでしょうか?
マウスカーソルを動かすにはjava.awt.RobotクラスのmouseMoveメソッドで行うことができます。
ただ、テキスト欄でエンターを押したら次の入力欄にフォーカスを移動するほうが自然な流れかとおもいます
フォーカスの移動は移動先のコンポーネントのrequestFocusあたりのメソッドを呼び出すことでできます。
addActionListenerでもできます。
が、ActionListenerはあくまでそのコンポーネント
でのアクションの処理を記述するものであり、
フォーカス順序の制御をするためのものではありません。

まぁ、結果的に同じことができればいいのですが。笑
一応流儀にのっとってみました。
あやめ♪さん、しのぶさん
ありがとうございました。
ヒントから検索して調べてみましたが

inText.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
inText.transferFocus();}
});

こんな感じでやってみました。
1つのコンポーメントを動かしたかっただけですのでこれが一番手っ取り早いようです^^;
色々と勉強になりました。
また解らない事が出て来ればお世話になるかもしれませんが、
どうぞよろしくお願いします。
ありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。