[Solucionado] no perder el Foco??

Iniciado por Nakatsukasa Itero, 10 Mayo 2012, 20:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Nakatsukasa Itero

 :silbar:
pues como dice el título, ando y ando busque ejemplos y code sobre el como tener dos ventanas abiertas (independientes) y que la segunda que se abre, no permita que la minimize o que de click en otra ventana o que pierda el foco, pero no+ no.... y estoy casi seguro de que es como la forma de (o parecida) evitar que se cierre la ventana, es consumir el evento del lostfocus, pero no se como agarrarlo o hacer eso.... alguien me puede guiar, se que no deboe pedir codigo, pero al menos una pagina donde me oriente, gracias y disculpas.

uso NetBeans (7.1.2)
JDK 7.4
JavaFX 2.1  ;D
Kanashimi no Itero

RyogiShiki

Imagino que hablas de Swing. No es posible conseguir ese comportamiento que mencionas, se puede conseguir un comportamiento similar, que es bastante molesto, pero no funcionará en el foco de las ventanas, veras como tu ventana pierde el foco en favor de otra ventana y tu ventana comenzará a pedir el foco, lo que terminará en un comportamiento intermitente bastante molesto, Como dices que las ventanas son independientes, imagino que no quieres una ventana "bloqueante". Este comportamiento lo he conseguido desde KDE en Gentoo Linux, no se como se comportará en Windoes o en otro DE con un gestor diferente.

Código (java) [Seleccionar]


package dontlosefocus;

import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;

/**
*
* @author ryogi
*/
public class DontLoseFocus implements FocusListener {
   
    private JFrame mainFrame = new JFrame("No lose focus!!");
   
    public DontLoseFocus() {
        mainFrame.setSize(200, 200);
        mainFrame.setResizable(false);
        mainFrame.setAlwaysOnTop(true);
        mainFrame.addFocusListener(this);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    public void show() {
        mainFrame.setVisible(true);
    }
   
    public static void main(String[] args) {
        DontLoseFocus dlf = new DontLoseFocus();
        dlf.show();
    }

    @Override
    public void focusGained(FocusEvent e) {
    }

    @Override
    public void focusLost(FocusEvent e) {
        mainFrame.requestFocus();
    }
}


Si tienes alguna duda con el código me avisas.

Saludos


Nakatsukasa Itero

ese si me funkó con swing, pero no en fx; y si el resultado que quiero es una ventana bloqueante, imagina que es como un joption o jdialog, ya vez que cuando aparecen, la parte de atras (su ancestor o parent) no puede ser accedida debido a que el dialog u option sigue arriba esperando que le presiones un boton o la cierres, eso es lo que busco..... gracias por tu respuesta de todas formas...   :-\
Kanashimi no Itero

RyogiShiki

#3
Hola. Bueno si se trata de JavaFX lo que tienes que hacer entonces es usar Modalities en el Stage. Puedes revisar los tipos de Modality que puedes aplicar en un Stage en el siguiente enlace: http://docs.oracle.com/javafx/2/api/javafx/stage/Stage.html

En todo caso te dejo un ejemplo ilustrando lo que he expuesto:

Código (java, 34) [Seleccionar]
package blockingwindow;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
import javafx.stage.Modality;
import javafx.stage.Stage;


/**
*
* @author Takumi
*/
public class BlockingWindow extends Application {

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) {
       launch(args);
   }
   
   @Override
   public void start(Stage primaryStage) {
       Button newBlockWin = new Button("Abrir ventana");
       newBlockWin.setOnAction(new EventHandler<ActionEvent>() {
           @Override
           public void handle(ActionEvent event) {
               final Stage blockWin = new Stage();
               blockWin.initModality(Modality.APPLICATION_MODAL);
               
               Scene blockScene = new Scene(new Group(
                       new Text(10, 10, "Blocking Window")), 200, 200);
               blockWin.setScene(blockScene);
               blockWin.show();
           }
       });
       Group root = new Group();
       Scene scene = new Scene(root, 300, 300);
       root.getChildren().add(newBlockWin);
       primaryStage.setTitle("Blocking Window");
       primaryStage.setScene(scene);
       primaryStage.sizeToScene();
       primaryStage.show();
   }
}



Como puedes ver el Modality se ha aplicado al Stage creado desde el handle del botón.

Espero sea de ayuda.

Saludos


Nakatsukasa Itero

 :D
arigatou
but
no me funcionaron las "Modas" (Modals) aunque está muy bienb el code..... pero gracias de todos modos... lo pondré como solucionado, esa parte ya la agarró el jefe despues de haber visto las pruebas y ver... que no funcionaron, y pues me libré  ;D anyway Gracias por tu pronta respuesta y pide a quien quieras que javafx realmente siga asi de facil y que se le implemente mas facilidad aun... have a nice day ;-)
Kanashimi no Itero