Ayuda, Migracion de VB a Java con preguntas sobre el IDE

hola a todos espero me puedan ayudar ando aprendiendo Java (autodidacta) vengo de vb6 y bv.net
en vb 6 tenia algo que era el "inmediate" o como una consola que poniéndole
?variable
me mostraba el contenido de esta, me pregunto si hay algo asi en netbeans, aunque los "watch" de las variables ayudan, el immediate podrías poner expresiones complejas o el resultado de una bola de asignaciones.
en VB solía usar ctrl+break(pausa) para "interrumpir" la ejecución de código y me mostraba sobre que linea estaba ejecutando, no lo encuentro en netbeans.
cuando estoy debuggeando y veo que una variable esta mal o un fragmento de codigo realize mal una asignacion, es posible cambiarlo y que se muestre en tiempo de ejecucion?lo que pasa es que normalmente tengo que detenerlo y volverlo a correr.
cuando estoy debguggeando y digamos que paso por una asignacion o un procedimiento y deseo que vyuelva a pasar por esa evaluacion, como puedo hacerle para que se mueva el cursor otra vez (o sea regresarlo) ejemplo:
String s = "hola";
if(!s.IsEmpty())
"codigo";
else
---> "mas código...";
suponiendo que la flechita es la flecha del debugger como puedo moverla una vez mas a la evaluacion del if?? algo asi
String s = "hola";
---> if(!s.IsEmpty())
"código";
else
"mas codigo...";
y por ultimo, estoy leyendo un Libro "Programador certificado Java 2" me gustaría comprar otro libro para cuando lo acabe pero algo asi como java intermedio o alguno que me recomiendes para poderlo leer también, muchas gracias y espero me puedan ayudar
Muchas Gracias

pd. casualmente no existe una forma que me avise cuando alguien contesta?? es que nl a encuentro jejeje

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

Pues mira, yo nunca he

Pues mira, yo nunca he trabajado con NetBeans.... sólo te puedo ayudar con unas ligas que encontré, si gustas echarles una revisada...

La guía de usuario
El capítulo del debugger y otros,
aquí
aquí
aquí
aquí éste es videotutorial

Imagen de skuarch

Step-into

tambien puedes usar step-into o f7 y recorrer el codigo paso por paso apretando f7, te recomiendo que pongas la barra de debug en la parte superior

muchas gracias lo checare,

muchas gracias lo checare, entonces usan eclipse? o que ide? y como crean sus aplicaciones graficas??? todo opr codigo?saludos

Aprovecho para mencionar

Aprovecho para mencionar IntellJ IDEA que tiene un muy buen GUI builder.

Intellj IDEA GUI Builder

Sin embargo, un entendimiento de swing y su arquitectura es fundamental.

Aquí va un articulo que quizá ahorita no haga mucho sentido, pero eventualmente ( si tratas más con swing ) te servirá de mucho: Swing architecture

Muchas Gracias

muchas gracias por el apoyo ofrecido me siento muy bien en esta comunidad me gustaria que el foro tuviera opcion a avisarme cuando alguien responde xD jejeje pero si ando haciendo mis propias ventanitas con swing puro codigo, espero entender esto para crear a travez del UI muchas gracias :D

Imagen de ezamudio

Layouts

Revisa los layouts de Swing y AWT, clases como Box, FlowLayout, GridLayout, etc. Esas te ayudan a que se acomoden los componentes que les pones para que no tengas que poner coordenadas para cada cosa, solamente vas agregando elementos y se acomodan.

Si vas a hacer tus interfaces así, te recomiendo ampliamente que le eches un ojo a Groovy para que puedas usar el SwingBuilder. Y probablemente el lenguaje te sea un poco más fácil de aprender que Java, viniendo de VB. Un ejemplo de interfaces en Java y Groovy, para hacer la misma ventanita tipo Login (bastante fea):

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Login {

public static void main(String[] args) {
  JFrame w = new JFrame("Login");
  GridLayout grid = new GridLayout(3, 2);
  w.getContentPane().setLayout(grid);
  w.getContentPane().add(new JLabel("Usuario:"));
  w.getContentPane().add(new JTextField(20));
  w.getContentPane().add(new JLabel("Password:"));
  w.getContentPane().add(new JPasswordField(20));
  JButton boton = new JButton("Autenticar");
  w.getContentPane().add(boton);
  boton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ev) {
      JOptionPane.showMessageDialog(null, "Algo", "Aquí debes autenticar", JOptionPane.WARNING_MESSAGE);
    }
  });
  w.pack();
  w.setVisible(true);
}

}

Y ahora lo mismo pero con Groovy SwingBuilder:

import groovy.swing.SwingBuilder

def w = new SwingBuilder().frame(title:'Login') {
  gridLayout(cols:2, rows:3)
  label(text:'Usuario:')
  textField(columns:20)
  label(text:'Password:')
  passwordField(columns:20)
  button(action:action(name:'Autenticar', closure:{
    JOptionPane.showMessageDialog(null, "Algo", "Aquí debes autenticar", JOptionPane.WARNING_MESSAGE)
  }))
}
w.pack()
w.visible=true

Es bastante menos código y en mi opinión hasta se lee mejor. SwingBuilder tiene varias ventajas adicionales, no solamente es conveniente para construir la interfaz, sino que por ejemplo para las acciones de botones y cosas así, le pasas un closure y automágicamente se invocará en un thread separado del principal de la interfaz (cosa que no pasa en el primer ejemplo que puse, cosa que está mal, pues debería usar un SwingWorker para no afectar el thread que despacha eventos en Swing).

Para hacer justicia, esta

Si se ve fea, la versión en Java, para hacer justicia, esta sería una versión más apegada a lo que hace el SwingBuilder:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Login {
  public static void main(String[] args) {

    JFrame w = new JFrame("Login"){{

      setLayout(new GridLayout(3, 2));
      add(new JLabel("Usuario:"));
      add(new JTextField(20));
      add(new JLabel("Password:"));
      add(new JPasswordField(20));

      add( new JButton("Autenticar"){{
        addActionListener( new ActionListener() {
          public void actionPerformed(ActionEvent ev) {
            JOptionPane.showMessageDialog(null, "Algo", "Aquí debes autenticar", JOptionPane.WARNING_MESSAGE);
          }
        });
      }});
     
    }};
    w.pack();
    w.setVisible(true);
  }
}

Imagen de ezamudio

actionListener

Pero no hay ni cómo darle vuelta al hecho de que es una hueva agregar el ActionListener al botón, y que el código que se ejecuta en el método actionPerformed se ejecuta en el mismo hilo que despacha eventos de Swing, por lo que si haces ahí por ejemplo un cálculo muy intensivo de CPU o algo así, se traba la interfaz...

Efectivamente, ahí esta lo

Efectivamente, ahí esta lo bello de los closures. Por otro lado, para eso estan los gui builders ( para la talacha de poner un montón de cosas).

Por cierto, intenté el código en Groovy y se portó igual que el de Java swing ( bloqueo el EDT )

import groovy.swing.SwingBuilder

def x = new SwingBuilder().frame( title:"") {
   flowLayout()
   textField("Cambiame ( si puedes ) ")
   button( action:  action(name:"Action", closure: {
         println("Corriendo en " + Thread.currentThread() )
         Thread.sleep( 10000 ) // haz como que trabajas
          println( "Fin" )
     }))
}
x.pack()
x.visible= true

No se puede actualizar el texto después de haber presionado el botón. Supongo que necesita alguna bandera extra o algo así.

Lo siguiente funciona como se espera, el texto se puede modificar por que el press del botón corre en otro hilo.

import groovy.swing.SwingBuilder

def x = new StringBuilder().frame( title:"") {
   flowLayout()
   textField("Cambiame ( si puedes ) ")
   button( action:  action(name:"Action", closure: {
      new Thread({
         println("Corriendo en " + Thread.currentThread() )
         Thread.sleep( 10000 ) // haz como que trabajas
          println( "Fin" )
        }).start()
     }))
}
x.pack()
x.visible= true

Pero supongo que esto ya no es Groovonico.

¿Viste elejemplo en Ryz? :)

Imagen de ezamudio

StringBuilder?

Orale todo lo que puede hacer un StringBuilder! jaj creo que se te fue ahí algo.

Quería ver eso del thread en los docs de SwingBuilder pero ahorita está abajo groovy.codehaus.org así que no puedo revisarlo...

¿Dónde está el ejemplo en Ryz?

Jajajaj lo reescribí todo,

Jajajaj ya escribo StringBuilder en automático. Reescribí todo por que mi otra máquina no tiene red. Pero ahi corrió así.

Sobre el ejemplo de Ryz, lo quité por que actualmente esto no jala , pero para el pre-alpha deberá ser algo como:

import( javax.swing.* )
importFrom( java.awt, *, event.* )
demo.Login {
  main() {
    w = : Frame("Login") { // anonymous class syntax :Type(){ ...
      layout= GridLayout(3,2)  //property for setXyz is xyz=
      add JLabel("Usuario")  // In 1 arg method parenthesis are op. ( not in alpha )
      add JTextField( 20 )
      add JLabel("Password")
      add JPasswordField(20)

      add : JButton("Autenticar"){
           // SAM( single abstract method )  such as ActionListener can receive a closure
          addActionListener( ( e : ActionEvent ) {  
            JOptionPane.showMessageDialog( null, "Algo", "Aqui debes autenticar", JOptionPane.WARNING_MESSAGE )
          })
      }
    }
    w.pack()
    w.visible=  true  // "visible="  != "visible = " no special treatment for "=" operator  
  }
}

Y si, sé que parece, pero no me lo acabo de inventar :)

Imagen de ezamudio

SwingBuilder

Versión corregida del panel, para ejecutar por separado la acción del botón: Primero, para tener más orden, definimos esa acción como un closure, y vamos a tener una instancia de SwingBuilder a la mano.

def sb = new SwingBuilder()
def w = null
def accion = {
  println "Corriendo en ${Thread.currentThread().name}"
  Thread.sleep(3000)
  JOptionPane.showMessageDialog(null, "Algo", "Aquí debes autenticar", JOptionPane.WARNING_MESSAGE)
}

Luego, vamos a crear la ventana y asignarla a la variable w, todo eso en el EDT (Event Dispatch Thread). En la acción del botón invocamos el método doOutside con lo cual ya se va a ejecutar el closure en un thread separado:

sb.edt {
  w = frame(title:'Login') {
    gridLayout(cols:2, rows:3)
    label(text:'Usuario:')
    textField(columns:20)
    label(text:'Password:')
    passwordField(columns:20)
    button(action:action(name:'Autenticar', closure:{
      sb.doOutside(accion)
    }))
  }
}
w.pack()
w.visible=true

Cool, no?

Así sí. Me imagino la

Así sí.

Me imagino la implementación algo como:

public doOutside( Runnable r  ) {
   Thread t = new Thread( r );
    t.start();
}

Con los tipos correctos claro, por que obvio un closure no es un Runnable.

Imagen de ezamudio

SwingBuilder.doOutSide()

Es un poquito más complicado el código de ese método:

    public SwingBuilder doOutside(Closure c) {
        c.setDelegate(this)
        if (!(c instanceof MethodClosure)) {
            c = c.curry([this])
        }
        if( SwingUtilities.isEventDispatchThread() )
            Thread.start(c)
        else
            c.call()
        return this
    }