Problema programación JAVA

Desde que en 2013 acabé el ciclo superior, no he vuelto a picar teclas, por saturación y otras cuestiones...

Como en realidad me gusta, he decidido reciclarme y quitarme el óxido y estoy haciéndolo con un curso gratuito de internet... pero tengo dos problemas...

Antes de explicarlos decir que lo he probado en 3 ordenadores diferentes con estas características:

1.- Mac Mini 2021 con procesador Apple Silicon M1 y 16 Gb de Ram. MacOS Sonoma 14.0

2.- MacBook Pro 2020 con procesador Intel i7 y 16 Gb de Ram. MacOS Sonoma 14.0

3.- Portátil PackardBell con procesador i5 y 8 Gb de Ram, con Windows 10.

Problema 1: En los ordenadores Mac, he probado con Eclipse, NetBeans e IntelliJ con el mismo problema: con la implementación de los JTextField, al ejecutar el código la app se vuelve lentíiiiisima, del orden de 2 o 3 minutos para que aparezcan dos o tres caracteres en el JTextField y, para cerrarla tenga que hacerlo desde el compilador…

Problema 2: En el ordenador con Windows cuando uso cuadro.getText() no captura nada… probado con Eclipse. ("cuadro" o cualquier otro nombre del objeto instanciado)

En los 3 ordenadores JDK 21 y todo actualizado.

Sobra decir que he revisado el código más de 20 veces en cada ordenador e IDE, incluso copiando al pie de la letra el código del vídeo del curso, siempre con el mismo resultado…

Busco por Google y no encuentro nada... ¿Alguien sabe por dónde pueden ir los tiros?


Gracias por tu respuesta, pero nada...

Este es el cutre código... no lo veo normal y me desespera no saber qué narices pasa... un ordenador, vale... dos con diferente arquitectura, me resulta muy extraño pero bueno, trago.... ahora bien, 3 ordenadores completamente diferentes...

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

public class FocoEvento {
    public static void main(String[] args) {
        Marco5 marco1 = new Marco5();
        marco1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        marco1.setTitle("Probando el foco...");
        marco1.setBounds(Marco5.ancho/4, Marco5.alto/3, Marco5.ancho/4, Marco5.alto/4);
    }
}
class Marco5 extends JFrame {
    static int ancho, alto;
    public Marco5(){
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        ancho = pantalla.width;
        alto = pantalla.height;
        setVisible(true);
        setResizable(false);
        add(new Lamina());
    }
}
class Lamina extends JPanel{
    JTextField campo1, campo2;
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        setLayout(null);
        campo1=new JTextField();
        campo2=new JTextField();
        campo1.setBounds(120,10,150,20);
        campo2.setBounds(120,50,150,20);
        add(campo1);
        add(campo2);
        ObtenerFoco foco1=new ObtenerFoco();
        ObtenerFoco foco2=new ObtenerFoco();
        campo1.addFocusListener(foco1);
        campo2.addFocusListener(foco2);
    }
    private class ObtenerFoco implements FocusListener {
        @Override
        public void focusGained(FocusEvent e) {
            System.out.println("He ganado el foco");
        }
        @Override
        public void focusLost(FocusEvent e) {
            String email=campo1.getText();
            System.out.println(email);

        }

    }
}
Buenas, lo siento, sólo he picado un poco de código con PSeint y Visual Studio Code, pero fué sólo una completa toma de contacto.

Todo lo que ví diría gira en torno a los enlaces que ya examinamos, pero si tuvieras tiempo -y paciencia- tal vez recabes algún detalle junto a lo que puedan comentarte los compañeros, ánimo.

https://intellij-support.jetbrains.com/ ... is-Slowwww

https://stackoverflow.com/questions/229 ... erformance

https://stackoverflow.com/questions/677 ... -very-slow

https://stackoverflow.com/questions/627 ... ading-java

https://youtrack.jetbrains.com/issue/JB ... meta-issue

https://stackoverflow.com/questions/563 ... beans-11-0
nievi escribió:Buenas, lo siento, sólo he picado un poco de código con PSeint y Visual Studio Code, pero fué sólo una completa toma de contacto.

Todo lo que ví diría gira en torno a los enlaces que ya examinamos, pero si tuvieras tiempo -y paciencia- tal vez recabes algún detalle junto a lo que puedan comentarte los compañeros, ánimo.

https://intellij-support.jetbrains.com/ ... is-Slowwww

https://stackoverflow.com/questions/229 ... erformance

https://stackoverflow.com/questions/677 ... -very-slow

https://stackoverflow.com/questions/627 ... ading-java

https://youtrack.jetbrains.com/issue/JB ... meta-issue

https://stackoverflow.com/questions/563 ... beans-11-0


Gracias por tu tiempo e interés. A ver qué me dicen/encuentro...
@DonVito has probado el siguiente código? Es la recomendación de una de las inteligencias artificiales que están tan de moda ;)
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

public class FocoEvento {
    public static void main(String[] args) {
        try (Marco5 marco1 = new Marco5()) {
            marco1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            marco1.setTitle("Probando el foco...");
            marco1.setBounds(Marco5.ancho/4, Marco5.alto/3, Marco5.ancho/4, Marco5.alto/4);
        }
    }
}

class Marco5 extends JFrame {
    static int ancho, alto;
    public Marco5(){
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        ancho = pantalla.width;
        alto = pantalla.height;
        setVisible(true);
        setResizable(false);
        add(new Lamina());
    }
}

class Lamina extends JPanel{
    JTextField emailField, passwordField;

    public Lamina(){
        setLayout(new BorderLayout());

        emailField = new JTextField();
        passwordField = new JTextField();

        add(emailField, BorderLayout.NORTH);
        add(passwordField, BorderLayout.SOUTH);

        emailField.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                System.out.println("Email field has gained focus");
            }

            @Override
            public void focusLost(FocusEvent e) {
                String email = emailField.getText();
                System.out.println("Email entered: " + email);
            }
        });

        passwordField.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                System.out.println("Password field has gained focus");
            }

            @Override
            public void focusLost(FocusEvent e) {
                String password = passwordField.getText();
                System.out.println("Password entered: " + password);
            }
        });
    }
}

Newton escribió:@DonVito has probado el siguiente código? Es la recomendación de una de las inteligencias artificiales que están tan de moda ;)
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

public class FocoEvento {
    public static void main(String[] args) {
        try (Marco5 marco1 = new Marco5()) {
            marco1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            marco1.setTitle("Probando el foco...");
            marco1.setBounds(Marco5.ancho/4, Marco5.alto/3, Marco5.ancho/4, Marco5.alto/4);
        }
    }
}

class Marco5 extends JFrame {
    static int ancho, alto;
    public Marco5(){
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        ancho = pantalla.width;
        alto = pantalla.height;
        setVisible(true);
        setResizable(false);
        add(new Lamina());
    }
}

class Lamina extends JPanel{
    JTextField emailField, passwordField;

    public Lamina(){
        setLayout(new BorderLayout());

        emailField = new JTextField();
        passwordField = new JTextField();

        add(emailField, BorderLayout.NORTH);
        add(passwordField, BorderLayout.SOUTH);

        emailField.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                System.out.println("Email field has gained focus");
            }

            @Override
            public void focusLost(FocusEvent e) {
                String email = emailField.getText();
                System.out.println("Email entered: " + email);
            }
        });

        passwordField.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                System.out.println("Password field has gained focus");
            }

            @Override
            public void focusLost(FocusEvent e) {
                String password = passwordField.getText();
                System.out.println("Password entered: " + password);
            }
        });
    }
}



Con ese código funciona... lo que me deja más loco todavía....

No entiendo cómo el código que puse le funciona al que imparte el curso y a los demás, pero a mi no...

He eliminado en el código que puse el paintComponent y hecho las mínimas adaptaciones y todo correcto... en fin....

Gracias a todos!
@DonVito por si es de ayuda:

--> La línea import javax.swing.*; importa todas las clases del paquete javax.swing, que proporciona componentes de interfaz de usuario para aplicaciones Java.

--> La línea import java.awt.*; importa todas las clases del paquete java.awt, que proporciona clases para crear y administrar interfaces de usuario gráficas.

--> La línea import java.awt.event.FocusEvent; importa la clase FocusEvent del paquete java.awt.event, que representa un evento de foco en un componente.

--> La línea import java.awt.event.FocusListener; importa la interfaz FocusListener del paquete java.awt.event, que define métodos para recibir eventos de foco en un componente.

--> La clase FocoEvento es la clase principal del programa. Contiene el método main, que es el punto de entrada del programa. El método main crea una instancia de la clase Marco5 y establece algunas propiedades de la ventana.

--> La clase Marco5 extiende la clase JFrame y representa una ventana de la aplicación. En su constructor, la clase Marco5 obtiene el tamaño de la pantalla y establece algunas propiedades de la ventana, como la visibilidad y la capacidad de cambiar el tamaño. También agrega una instancia de la clase Lamina a la ventana.

--> La clase Lamina extiende la clase JPanel y representa el panel principal de la ventana. En su constructor, la clase Lamina establece un diseño de borde y crea dos campos de texto. Luego, agrega los campos de texto al panel y agrega oyentes de foco a ellos. Cuando un campo de texto gana el foco, el programa imprime un mensaje en la consola. Cuando un campo de texto pierde el foco, el programa imprime el texto ingresado en el campo de texto en la consola.

[oki]
7 respuestas