Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ContainerOrderFocusTraversalPolicyについて

ContainerOrderFocusTraversalPolicyを使って初期フォーカスを
text2に当てる場合どうしたらいいでしょうか?

public class abc2 extends JFrame {
JTextField text1,text2;
JButton b1,b2,b3;

abc2() {
JPanel p = new JPanel();
text1 = new JTextField(10);
text2 = new JTextField(10);
text1.setBounds(50,150,130,20);
text2.setBounds(250,150,130,20);
p.add(text1);
p.add(text2);
JFrame frame = new JFrame("お試し画面2");
Container c = frame.getContentPane(); 
c.add(p);
frame.setSize(1000,500);
frame.setLocationRelativeTo(null);
frame.setVisible(true); 

public static void main(String args[]) { 
new abc2();
}
}

11

回答

4925

閲覧

11件の回答

評価

0

getFirestComponent()が、text2を返せばよい。

評価

0

少し変えてgetFirestComponent()を追加して見ましたが
動作しません。どこがおかしいでしょうか?

public class abc2 extends JPanel {
JTextField text1,text2;
JButton b1,b2,b3;

abc2() {

//テキスト作成
text1 = new JTextField(10);
text2 = new JTextField(10);

add(text1);
add(text2);
text1.setBounds(50,150,130,20);
text2.setBounds(250,150,130,20);

}

class frame extends JFrame {

frame() {           
abc2 test = new abc2();
//フレーム作成
JFrame frame = new JFrame("お試し画面2");
//JFrameの内容表示域を得る。
Container c = frame.getContentPane();
//初期フォーカスセット
setFocusTraversalPolicy(new container());
//中間コンテナ配置を決める。
c.add(test);
//画面サイズ
frame.setSize(1000,500);
//画面を中央に配置
frame.setLocationRelativeTo(null);
//ウィンドウを可視化
frame.setVisible(true);


}
}
class container extends ContainerOrderFocusTraversalPolicy {
public Component getFirestComponent(Container aContainer)  {

return text2;
}
}
public static void main(String args[]) {
abc2 test = new  abc2();
test.new frame();
}
}

評価

0

TraversalPolicyを、JFrameじゃなく、
ContextPaneにセットしてみれば、どうなります?

評価

0

あと、getFirstComponent()が呼び出されるよりも前に、
text2のインスタンスが存在している必要がある。

評価

0

panelにTraversalPolicyをもってきてgetFirstComponent()が呼び出されるよりも前に、text2のインスタンスをもってきましたがまだおかしいです。何度も回答頂いてすみません。

public class abc2 extends JPanel {
JTextField text1,text2;
JButton b1,b2,b3;

abc2() {


text1 = new JTextField(10);
text2 = new JTextField(10);

add(text1);
add(text2);
text1.setBounds(50,150,130,20);
text2.setBounds(250,150,130,20);
setFocusTraversalPolicy(new container());
}

class frame extends JFrame {

frame() {           
abc2 test = new abc2();

JFrame frame = new JFrame("お試し画面2");

Container c = frame.getContentPane();

c.add(test);

frame.setSize(1000,500);

frame.setLocationRelativeTo(null);

frame.setVisible(true);


}
}
class container extends ContainerOrderFocusTraversalPolicy {
public Component getInitialComponent(Container aContainer)  {

return text2;
}
}
public static void main(String args[]) {
abc2 test = new  abc2();
test.new frame();
}


}

評価

0

getFirstComponent()はどこに行ったのかな。

APIを見てみると、こっちの方が関連してそうってなメソッドがある。
俺の方がうまくいってるのはコイツのおかげだろうか。
つか、APIはちゃんと見てるのかね。

後、Policyをセットするのは、JFrameでも大丈夫のようだ。

これは、オマケ。
http://okwave.jp/qa4386419.html

評価

0

すみません違うメソッド使ってしまってました。APIは見ています。GUIに関しては初めてなので色々とご迷惑かけてすみません。このソースでも駄目でした。

public class abc2 extends JPanel {
JTextField text1,text2;

abc2() {

//テキスト作成
text1 = new JTextField(10);
text2 = new JTextField(10);

add(text1);
add(text2);

}

class frame extends JFrame {

frame() {  
//panelをインスタンス化
abc2 test = new abc2();
//フレーム作成
JFrame frame = new JFrame("お試し画面2");
//JFrameの内容表示域を得る。
Container c = frame.getContentPane();  
//初期フォーカスセット
setFocusTraversalPolicy(new container());          
//panelをframeに配置。
c.add(test);
//画面サイズ
frame.setSize(1000,500);
//画面を中央に配置
frame.setLocationRelativeTo(null);
//ウィンドウを可視化
frame.setVisible(true);


}
}
class container extends ContainerOrderFocusTraversalPolicy {
public Component getFirstComponent(Container aContainer)  {

return text2;
}
}
public static void main(String args[]) {
abc2 test = new  abc2();
test.new frame();
}
}

評価

0

>getFirestComponent()が、text2を返せばよい。

誰だよ、初っ端からこんなこと書いたヤツ。orz

こんなメソッドがあります。
メソッド名からして、いかにもそれっぽいし。

>getDefaultComponent
>フォーカスするデフォルトの Component を返します。

評価

0

getFirestComponentの部分をgetDefaultComponentに変えて実行しましたが駄目でした。

評価

0

となると、ContainerOrderFocusTraversalPolicyを
丸ごと塗りつぶすしかないのかな。
俺のやり方だが、Swingの構造に詳しい人なら、
もっとピンポイントな制御ができるのかもね。

こんな感じ。

// フォーカス対象のコンポーネント群を配列に格納
final Component[] targetArray = { ... };

FocusTraversalPolicy policy = new ContainerOrderFocusTraversalPolicy() {
  // 配列のままでいいなら必要なし
  List targetList = new ArrayList(targetArray);

  // FocusTraversalPolicyに定義があるメソッドをすべてオーバーライドする。
  // 返り値は、targetArrayかtargetListから、
  // 自分で探して返すようにする。
};

setFocusTraversalPolicy(policy);

評価

0

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1019727590

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。