Pregunta JTabbedPane: acciones realizadas antes de mostrar la pestaña seleccionada


Cuando uno de los paneles presente en un JTabbedPane Al hacer clic, necesito realizar algunas acciones al inicio. Digamos, por ejemplo, necesito verificar el nombre de usuario y la contraseña. Solo si coinciden, las operaciones del panel particular deben realizarse. ¿Puedes sugerir algún método?


5
2018-06-30 10:42


origen


Respuestas:


No estoy seguro de entender completamente tu pregunta, pero haría algo como:

  • Agregue un ChangeListener al JTabbedPane para escuchar el primer clic en la pestaña.
  • Cuando se produce un ChangeEvent, realice el inicio de sesión en un subproceso en segundo plano utilizando un SwingWorker.
  • Si el inicio de sesión es exitoso, realice las operaciones de IU requeridas en el hilo de despacho de eventos.

Por ejemplo:

    tabbedPane.addChangeListener(new ChangeListener() {
    private boolean init;

    public void stateChanged(ChangeEvent e) {
        if (!init) {                                        
            init = true;

            new SwingWorker<Boolean, Void>() {
                @Override
                protected void done() {
                    try {
                        boolean loggedIn = get();

                        if (loggedIn) {
                            // Success so perform tab operations.
                        }
                    } catch (InterruptedException e1) {
                        e1.printStackTrace(); // Handle this.
                    } catch (ExecutionException e1) {
                        e1.printStackTrace(); // Handle this.
                    }
                }

                protected Boolean doInBackground() throws Exception {
                    // Perform login on background thread.  Return true if successful.
                    return true;
                }
            }.execute();
        }
        }
    });

8
2018-06-30 10:53



La acción para cambiar la pestaña es activada por un detector de mouse en la clase UI. revisa si hay una pestaña en la coordenada clicada y, si es así, si la pestaña está habilitada. Si ese criterio se cumple, llamará setSelectedIndex(int) en tu JTabbedPane. Para interceptar el cambio de pestaña, lo que puede hacer es anular setSelectedIndex(int) para activar una verificación de permisos. Una vez validados los permisos, puede realizar una llamada al super.setSelectedIndex(int). esto debería hacer lo que quieras.

tenga en cuenta que si la verificación de permisos es una llamada larga (es decir, una llamada a una base de datos o un servidor), debe usar algo como un SwingWorker rompa su procesamiento, de modo que la verificación de permisos se haga fuera de la AWT EventQueue y la llamada a super.setSelectedIndex(int) se hace en el AWT EventQueue.


3
2018-06-30 11:29