4

簡単な質問があります。javax.swing.JFrameで作成されたプロジェクトがあります。Jframeに追加したすべてのオブジェクトを繰り返し処理したいと思います。それは可能ですか、どうすればできますか?

4

3 に答える 3

11

これにより、JFrameのcontentPane内のすべてのコンポーネントが繰り返され、コンソールに出力されます。

public void listAllComponentsIn(Container parent)
{
    for (Component c : parent.getComponents())
    {
        System.out.println(c.toString());

        if (c instanceof Container)
            listAllComponentsIn((Container)c);
    }
}

public static void main(String[] args)
{
    JFrame jframe = new JFrame();

    /* ... */

    listAllComponentsIn(jframe.getContentPane());
}
于 2012-04-22T19:18:28.880 に答える
0

次のコードは、FORループを使用してJFrame内のすべてのJTextFieldをクリアします

Component component = null; // Stores a Component

Container myContainer;
myContainer = this.getContentPane();
Component myCA[] = myContainer.getComponents();

for (int i=0; i<myCA.length; i++) {
  JOptionPane.showMessageDialog(this, myCA[i].getClass()); // can be removed
  if(myCA[i] instanceof JTextField) {
    JTextField tempTf = (JTextField) myCA[i];
    tempTf.setText("");
  }
}
于 2014-08-20T12:43:52.807 に答える
0

「ルート」コンポーネントからすべてのコンポーネントをトラバースし、それらを使用して「何かを行う」(コンシューマー)という反復的な方法:

public static void traverseComponentTree( Component root, Consumer<Component> consumer ) {
    Stack<Component> stack = new Stack<>();
    stack.push( root );
    while ( !stack.isEmpty() ) {
        Component current = stack.pop();
        consumer.accept( current ); // Do something with the current component
        if ( current instanceof Container ) {
            for ( Component child : ( (Container) current ).getComponents() ) {
                stack.add( child );
            }
        }
    }
}
于 2019-12-20T21:27:22.407 に答える