Java - Como usar un JDialog java netbeans

 
Vista:

Como usar un JDialog java netbeans

Publicado por Rafael (3 intervenciones) el 17/03/2020 18:46:05
Una consulta, tengo una aplicacion y en cada JinternalFrame uso un Jdialog para hacer una busqueda de personas, ahora si creo otro JinternalFrame e la que usare el dialog para buscar personas lo que hago es copiar de un anterior y pegar en el nuevo para asi poder usarlo, pero si hago alguna modificacion en un dialog y quiero que todos sean igual tengo que ir de uno en uno haciendo esa modificacion, lo que quiero es crear solo un dialog de busqueda para que se accese desde cualquier jinternalframe. Espero me haga entender, de antemano gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como usar un JDialog java netbeans

Publicado por Kabuto (1381 intervenciones) el 18/03/2020 13:08:40
Supongo que has creado una clase que hereda (extends) de JDialog.

Esa clase la puedes guardar en un archivo .java separado y luego invocarla desde cualquier otra clase para usarla.
Si estuvieran en distinto package, te bastaría con hacer un import
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como usar un JDialog java netbeans

Publicado por Rafael (3 intervenciones) el 18/03/2020 16:28:41
Gracias por responder, cree esta clase, una consulta, como le asigno variables de controles, para que cuando ya ejecuta y envia los varlores lo haga en las cajsa de texto que deseo que aparezca,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package Clases;
 
/**
 *
 * @author sniper
 */
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
 
 
// AQUÍ EMPIEZA LA CLASE
public class Jdialog extends JDialog {
    Clases.LlenarTabla tabla=new Clases.LlenarTabla();
    private final JPanel contentPanel = new JPanel();
    JTable tbBuscaPer = new JTable();
    JPopupMenu menuGestion=new JPopupMenu();
    JMenuItem menuEnviar= new JMenuItem();
    JTextField txtCodigo=new JTextField();
    JTextField txtNombre=new JTextField();
    JLabel etiCodigo=new JLabel();
    JLabel etiNombre=new JLabel();
    int filsel;
    String codPersonal,datPersonal;
    // CONSTRUCTOR DE LA CLASE
    // crea la ventana, con los bordes, botones,
    // y todos los componentes internos para hacer lo que
    // se pretenda con éste diálogo.
    public Jdialog() {
        // evita cambio de tamaño
        setResizable(false);
        // título del diáolog
        setTitle(".:: BUSQUEDA DE PERSONAL ::.");
        // dimensiones que ocupa en la pantalla (vertical,horizontal,ancho,alto)
        setBounds(100, 100, 600, 700);
        // capa que contendrá todo
        getContentPane().setLayout(new BorderLayout());
        // borde de la ventan
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        // pone el panel centrado
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        // sin capas para poder posicionar los elementos por coordenadas
        contentPanel.setLayout(null);
        //////////////////////////////
        crearTitulo();
        crearBusqueda();
 
        {
//          // dimensiones que ocupa dentro del dialogo (vertical,horizontal,ancho,alto)
            JScrollPane scrooltabla=new JScrollPane();
            scrooltabla.setBounds(10, 130, 580, 500);
            contentPanel.add(scrooltabla);
            {
                tabla.llenarTablaPer(tbBuscaPer);
                scrooltabla.setViewportView(tbBuscaPer);
                ///////////////////////////////////
                tbBuscaPer.setCellSelectionEnabled(true);
                tbBuscaPer.addMouseListener(new java.awt.event.MouseAdapter() {
                    @Override
                    public void mouseClicked(java.awt.event.MouseEvent evt) {
                        filsel=tbBuscaPer.getSelectedRow();
                        ///cargamos el poput al hacer click derecho
                        menuGestion.add(menuEnviar);
                        //le asignamos el nombre al menu
                        menuEnviar.setText("Enviar Datos");
                        if(evt.getButton()==3){
                            //abrimos el emergente
                            menuGestion.show(tbBuscaPer,evt.getX(),evt.getY());
                            menuEnviar.addActionListener(new java.awt.event.ActionListener() {
                                @Override
                                public void actionPerformed(java.awt.event.ActionEvent evt) {
                                    try {
                                        if(filsel==-1){
                                            javax.swing.JOptionPane.showMessageDialog(null, "No  ha seleccionado ningun registro");
                                        }
                                        else{
                                            codPersonal=tbBuscaPer.getValueAt(filsel, 0)+"";//extraemos el codigo
                                            datPersonal=tbBuscaPer.getValueAt(filsel, 1).toString() +  " DNI: " + tbBuscaPer.getValueAt(filsel, 2).toString();
                                            javax.swing.JOptionPane.showMessageDialog(null,codPersonal + datPersonal);
                                        }
 
                                    }catch (HeadlessException e) {
                                        javax.swing.JOptionPane.showMessageDialog(null,e);//"Uno de los valores ingresados es invalido, revise por favor...");
                                    }
                                }
                            });
 
                            ///////////////
                        }
                        if(filsel==-1){//si no se selecciono nada{
                            javax.swing.JOptionPane.showMessageDialog(null,"Debe Seleccionar un Registro");
                        }
                    }
                });
                scrooltabla.setViewportView(tbBuscaPer);
//
            }
        }
        {
            // éste código lo ha generado Eclipse...
            JPanel buttonPane = new JPanel();
            buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
            getContentPane().add(buttonPane, BorderLayout.SOUTH);
            {
                JButton btnSalir = new JButton("Salir");
                btnSalir.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        // aquí van las acciones al hacer click en Vale
                        // envía el diálogo al recolector de basura de Java
                        dispose();
                    }
                });
                btnSalir.setActionCommand("Salir");
                buttonPane.add(btnSalir);
            }
        }
    }
    private void crearTitulo(){
        JLabel etiTitulo=new JLabel();
        etiTitulo.setText(".:: BUSQUEDA DE PERSONAL ::.");
        etiTitulo.setHorizontalAlignment(JLabel.CENTER);
        etiTitulo.setFont(etiTitulo.getFont().deriveFont(20f));
        etiTitulo.setBounds(5, 10, 580, 50);
        contentPanel.add(etiTitulo);
    }
    private void crearBusqueda(){
 
        etiCodigo.setText("Codigo:");
        etiNombre.setText("Nombre:");
        txtCodigo.setBounds(120, 60, 470, 30);
        txtCodigo.setToolTipText("Busqueda por el Codigo del Trabajador");
        txtNombre.setToolTipText("Busqueda por el Nombre y Apellidos del Trabajador");
        txtNombre.setBounds(120, 100, 470, 30);
        etiCodigo.setBounds(20, 60, 100, 30);
        etiNombre.setBounds(20, 100, 100, 30);
        contentPanel.add(txtCodigo);
        contentPanel.add(txtNombre);
        contentPanel.add(etiCodigo);
        contentPanel.add(etiNombre);
    }
 
 
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como usar un JDialog java netbeans

Publicado por Kabuto (1381 intervenciones) el 18/03/2020 19:41:42
Eso ya depende de como esté estructurado el resto del programa.
Lo ideal es seguir el patrón MVC: Modelo - Vista - Controlador.

Hay distintas formas de implementar este patrón, pero incluso la más sencilla es añadir al menos una clase que haga de Controlador, la cuál estaría referenciada como atributo en todas las clases, o al menos en la mayoría, de modo que el Controlador sería visible por todas.

Su función sería hacer de enlace entre las distintas clases y contaría con métodos para pasar datos y ordenes de un lado a otro.

Así tu JDialog una vez tiene los datos que buscaba (Modelo), se los podría entregar al Controlador para que este los mande a las cajas de texto donde han de mostrarse(Vista).

Pero adaptar ahora todo el programa a este patrón, puede ser muy laborioso si no se ha empezado desde el principio con esta idea, e incluso liarlo todo tanto que sería peor.


Otra solución menos drástica que se me ocurre, es pasarle a tu JDialog alguna referencia por su constructor.

Puedes pasarle directamente una referencia al objeto que modela el panel donde están las cajas de texto. Así ya tendrías acceso a él para enviarle los datos que ha de mostrar en las cajas.
Puedes crear un atributo donde guardar esa referencia, así cualquier método de tu clase JDialog podrá acceder a ella si lo necesita

1
2
3
4
5
6
7
8
9
public class Jdialog extends JDialog {
 
    private JPanel panelConCajasTexto;
 
    public Jdialog(JPanel panelCajas) {
 
        panelConCajasTexto = panelCajas; //Panel referenciado como atributo, cualquier método de la clase podrá usarlo
        ....
        ....

Así cuando invoques al JDialog para que sea mostrado en pantalla, en su invocación le pasas la referencia de ese panel y ya está.
Al tenerlo referenciado, tienes acceso a sus métodos y supongo que tendrá algunos para recibir los String que ha de mostrar en las cajas de texto.


Si no pudieras pasarle la referencia de ese objeto JPanel porque allá donde invoques al JDialog, ese panel esta fuera de scope(alcance) y no es visible para pasar la referencia (de ahí la utilidad de una clase Controlador con acceso a todo), puedes probar otra cosa como pasarle por el constructor un array de String.

- Creas el array justo antes de invocar al JDialog.
- Invocas el JDialog y le pasas la referencia del array por su constructor.
- El JDialog lo referencia como atributo, igual que con el ejemplo de JPanel, y cuando encuentra los datos a buscar, los mete en el array.
- EL JDialog ya ha terminado su tarea y se cierra. Y los datos encontrados permanecen en ese array que hemos creado previamente a su invocación.
- Ahora buscas la manera de hacer llegar ese array al JPanel que ha de mostrar los datos.

Son posibles soluciones que se me ocurren, pero si son aplicables o no, ya depende de la estructura de tu código.


Es habitual al principio encontrarnos con este problema de no saber bien como comunicar clases para que se pasen datos entre ellas.
Con el tiempo irás viendo de forma más clara como estructurar el código para que esto no te ocurra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como usar un JDialog java netbeans

Publicado por Costero (148 intervenciones) el 18/03/2020 21:04:57
Aqui un ejemplo que te puede dar una idea.

En JDialog que abre escribes en TextField clickeas el button y observa como update el parent window.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import javax.swing.*;
import java.awt.*;
import java.util.Map;
 
class CenterJDialog extends JFrame implements SwingObserver {
 
    private JTextField textField1;
    private JTextField textField2;
 
    public CenterJDialog() {
 
        // Set frame properties
        setTitle("Center a JDialog");
        setSize(400, 400);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
 
        // Set value of thisFrame to current object
        JFrame thisFrame = this;
 
        JButton jb = new JButton("Click me to open JDialog :)");
        textField1 = new JTextField(20);
        textField2 = new JTextField(20);
 
        add(jb);
        add(textField1);
        add(textField2);
        this.pack();
 
        jb.addActionListener(ae -> {
            JDialog jd = new CustomDialog(thisFrame, this);
        });
    }
 
    @Override
    public void updateMe(Map<String, String> updates) {
        System.out.println("Updated maps: " + updates.size());
        String value1 = updates.get("JTextField1");
        String value2 = updates.get("JTextField2");
        textField1.setText(value1);
        textField2.setText(value2);
    }
 
    public static void main(String args[]) {
        new CenterJDialog();
    }
 
}

1
2
3
4
5
import java.util.Map;
 
public interface SwingObserver {
    void updateMe(Map<String, String> updates);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import javax.swing.*;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
 
public class CustomDialog extends JDialog {
    private static int counter = 0;
    private SwingObserver observer;
    public CustomDialog(JFrame jFrame, SwingObserver observer) {
        super(jFrame);
        this.observer = observer;
 
        setTitle("I am a JDialog");
        setLayout(new FlowLayout());
 
        // Add sample components
        JTextField textField = new JTextField(20);
        add(textField);
        JButton jb = new JButton("Click Me");
        add(jb);
 
        jb.addActionListener(ae -> {
            counter++;
            Map<String, String> values = new HashMap<>();
            values.put("JTextField1", "1: " + textField.getText() + " " + counter);
            values.put("JTextField2", "2: " + textField.getText() + " " + counter);
           observer.updateMe(values);
        });
 
        setVisible(true);
        pack();
 
        // Set location centered for JFrame
        setLocationRelativeTo(this.getParent());
        setLocationRelativeTo(null);
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como usar un JDialog java netbeans

Publicado por rafael (3 intervenciones) el 19/03/2020 15:20:06
tengo esta linea

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private void menuEnviarActionPerformed(java.awt.event.ActionEvent evt) {
    modeloTabla=new DefaultTableModel();
    if(filsel==-1){
            javax.swing.JOptionPane.showMessageDialog(null, "No  ha seleccionado ningun registro");
        }
        else{
            try{
                cantidad=Double.parseDouble(javax.swing.JOptionPane.showInputDialog("Ingrese Cantidad"));
            }catch(HeadlessException | NumberFormatException e){
                javax.swing.JOptionPane.showMessageDialog(this.getParent(), "Ingrese Dato Valido");
                return;
            }
            if(cantidad==0){
                javax.swing.JOptionPane.showMessageDialog(this.getParent(), "Debe ingresar algun valor mayor que 0");
            }else{
                dato=new String[5];
                dato[0]=tbBuscaMat.getValueAt(filsel, 0)+"";
                dato[1]=tbBuscaMat.getValueAt(filsel, 1).toString()+"";
                dato[2]=tbBuscaMat.getValueAt(filsel, 2).toString()+"";
                dato[3]=String.valueOf(cantidad);
                dato[4]="---";
//                    javax.swing.JOptionPane.showMessageDialog(null, dato);
                modeloTabla.addRow(dato);
                dispose();
//                    tbBuscaMat.setModel(modeloTabla);
//                    javax.swing.JOptionPane.showMessageDialog(null, dato);
            }
        }
}

ahora cuando lleno ese modelo en esta clase y llamo desde un internaframe para cargar ese modelo lleno a una tabla no carga nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como usar un JDialog java netbeans

Publicado por Costero (148 intervenciones) el 19/03/2020 19:08:46
Le estas an~adiendo a una modelo de table que no esta conectado con ninguna tabla.

1
modeloTabla=new DefaultTableModel();

Le he hecho un pequen~o cambio a mi ejemplo de arriba para que veas como le an~ade el row a la tabla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.util.Map;
 
class CenterJDialog extends JFrame implements SwingObserver {
 
    private JTextField textField1;
    private JTextField textField2;
    private DefaultTableModel model;
 
    public CenterJDialog() {
 
        setTitle("Center a JDialog");
        setSize(400, 600);
        setLayout(new BorderLayout());
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
 
        JFrame thisFrame = this;
 
        JButton jb = new JButton("Click me to open JDialog :)");
        textField1 = new JTextField(20);
        textField2 = new JTextField(20);
 
        model = new DefaultTableModel();
        JTable table = new JTable(model);
 
        model.addColumn("Col1");
        model.addColumn("Col2");
 
        JPanel panelCenter = new JPanel();
        panelCenter.add(textField1);
        panelCenter.add(textField2);
 
        JPanel panelSouth = new JPanel();
        panelSouth.setLayout(new GridLayout());
        panelSouth.add(table);
 
        add(jb, BorderLayout.NORTH);
        add(panelCenter, BorderLayout.CENTER);
        add(panelSouth, BorderLayout.SOUTH);
        this.setVisible(true);
 
        jb.addActionListener(ae -> {
            JDialog jd = new CustomDialog(thisFrame, this);
        });
 
    }
 
    @Override
    public void updateMe(Map<String, String> updates) {
        System.out.println("Updated maps: " + updates.size());
        String value1 = updates.get("JTextField1");
        String value2 = updates.get("JTextField2");
        textField1.setText(value1);
        textField2.setText(value2);
 
        // an~adelo a la tabla
        model.addRow(new Object[] { value1, value2 });
 
    }
 
    public static void main(String args[]) {
        new CenterJDialog();
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar