Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Nakatsukasa Itero en 10 Mayo 2012, 20:19 pm



Título: [Solucionado] no perder el Foco??
Publicado por: Nakatsukasa Itero en 10 Mayo 2012, 20:19 pm
 :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


Título: Re: no perder el Foco??
Publicado por: RyogiShiki en 11 Mayo 2012, 03:32 am
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
  1.  
  2. package dontlosefocus;
  3.  
  4. import java.awt.event.FocusEvent;
  5. import java.awt.event.FocusListener;
  6. import javax.swing.JFrame;
  7.  
  8. /**
  9.  *
  10.  * @author ryogi
  11.  */
  12. public class DontLoseFocus implements FocusListener {
  13.  
  14.    private JFrame mainFrame = new JFrame("No lose focus!!");
  15.  
  16.    public DontLoseFocus() {
  17.        mainFrame.setSize(200, 200);
  18.        mainFrame.setResizable(false);
  19.        mainFrame.setAlwaysOnTop(true);
  20.        mainFrame.addFocusListener(this);
  21.        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22.    }
  23.  
  24.    public void show() {
  25.        mainFrame.setVisible(true);
  26.    }
  27.  
  28.    public static void main(String[] args) {
  29.        DontLoseFocus dlf = new DontLoseFocus();
  30.        dlf.show();
  31.    }
  32.  
  33.    @Override
  34.    public void focusGained(FocusEvent e) {
  35.    }
  36.  
  37.    @Override
  38.    public void focusLost(FocusEvent e) {
  39.        mainFrame.requestFocus();
  40.    }
  41. }
  42.  

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

Saludos


Título: Re: no perder el Foco??
Publicado por: Nakatsukasa Itero en 11 Mayo 2012, 21:51 pm
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...   :-\


Título: Re: no perder el Foco??
Publicado por: RyogiShiki en 12 Mayo 2012, 00:00 am
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
  1. package blockingwindow;
  2.  
  3. import javafx.application.Application;
  4. import javafx.event.ActionEvent;
  5. import javafx.event.EventHandler;
  6. import javafx.scene.Group;
  7. import javafx.scene.Scene;
  8. import javafx.scene.control.Button;
  9. import javafx.scene.text.Text;
  10. import javafx.stage.Modality;
  11. import javafx.stage.Stage;
  12.  
  13.  
  14. /**
  15.  *
  16.  * @author Takumi
  17.  */
  18. public class BlockingWindow extends Application {
  19.  
  20.    /**
  21.      * @param args the command line arguments
  22.      */
  23.    public static void main(String[] args) {
  24.        launch(args);
  25.    }
  26.  
  27.    @Override
  28.    public void start(Stage primaryStage) {
  29.        Button newBlockWin = new Button("Abrir ventana");
  30.        newBlockWin.setOnAction(new EventHandler<ActionEvent>() {
  31.            @Override
  32.            public void handle(ActionEvent event) {
  33.                final Stage blockWin = new Stage();
  34.                blockWin.initModality(Modality.APPLICATION_MODAL);
  35.  
  36.                Scene blockScene = new Scene(new Group(
  37.                        new Text(10, 10, "Blocking Window")), 200, 200);
  38.                blockWin.setScene(blockScene);
  39.                blockWin.show();
  40.            }
  41.        });
  42.        Group root = new Group();
  43.        Scene scene = new Scene(root, 300, 300);
  44.        root.getChildren().add(newBlockWin);
  45.        primaryStage.setTitle("Blocking Window");
  46.        primaryStage.setScene(scene);
  47.        primaryStage.sizeToScene();
  48.        primaryStage.show();
  49.    }
  50. }

(http://docs.oracle.com/javase/tutorial/images/jws-launch-button.png) (http://ivcsas.com/java/BlockingWindow.jar)

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

Espero sea de ayuda.

Saludos


Título: Re: no perder el Foco??
Publicado por: Nakatsukasa Itero en 12 Mayo 2012, 01:03 am
 :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 ;-)