ADA - Problemas al redimensionar componentes Java Swing

 
Vista:
Imágen de perfil de Emmanuel

Problemas al redimensionar componentes Java Swing

Publicado por Emmanuel (1 intervención) el 12/09/2016 04:26:18
Tengo algunos problemas al redimensionar un elemento
1
JList
que está dentro de un objeto
1
JSplitPane
que, lo que busco haga por medio del evento
1
componentResized()
del frame, es que las dimensiones mínimas, máximas y prdeterminadas de su ancho las defina tomando como base el ancho de la ventana, pero parece no funcionar, pues no lo hace y se sigue manteniendo su mismo ancho.

Este es mi código:
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
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.*;
 
public class ComVisor extends JFrame
{
	private JList imagesList;
	private JPanel imagePanel;
	private JSplitPane mainPanel;
	private JScrollPane scrollPanelRight;
	private int width;
 
	public ComVisor(String nameApplication)
	{
		setFrame(nameApplication);
		setComponents();
	}
 
	private void setFrame(String nameApplication)
	{
		setLayout(new BorderLayout(1, 3));
		setTitle(nameApplication);
		setMinimumSize(new Dimension(400, 200));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
		setLocationRelativeTo(null);
 
		this.addWindowListener(
			new WindowAdapter()
			{
				@Override
				public void windowClosing(WindowEvent e)
				{
					JOptionPane.showMessageDialog(ComVisor.this, nameApplication + "-Salida");
 
					return;
				}
			}
		);
		this.addComponentListener(
			new ComponentAdapter()
			{
				@Override
				public void componentResized(ComponentEvent E)
				{
					width = getWidth();
 
					scrollPanelRight.setPreferredSize(new Dimension(width / 3, 0));
					scrollPanelRight.setMinimumSize(new Dimension(width / 7, 0));
					scrollPanelRight.setMaximumSize(new Dimension(width / 5 * 4, 0));
 
					repaint();
 
					return;
				}
			}
		);
	}
 
	private void setComponents()
	{
		String[] a = {"dsdsdsd", "dsdsdkkhskj", "dskhkjdhskjdhksdh", "sdskdhskjhds"};
		JButton b = new JButton("Soy un boton xD");
		JPanel p = new JPanel();
		imagesList = new JList(a);
		p.add(b);
		imagesList.setVisibleRowCount(100);
		scrollPanelRight = new JScrollPane(imagesList);
		mainPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPanelRight, p);
		add(mainPanel, BorderLayout.CENTER);
 
		return;
	}
 
	private class Manejador implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent listener)
		{
			return;
		}
	}
}

y este es la clase principal que llama a un objeto de tipo
1
ComVisor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import static javax.swing.SwingUtilities.invokeLater;
 
public class Principal
{
	public static void main(String[] args)
	{
		invokeLater(
			new Runnable()
			{
				@Override
				public void run()
				{
					new ComVisor("ComVisor").setVisible(true);
 
					return;
				}
			}
		);
 
		return;
	}
}

Lo anexo para que puean ver el problema que tengo al probar las dimensiones del JList.

Muchas gracias por su ayuda
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 Alejandro

Problemas al redimensionar componentes Java Swing

Publicado por Alejandro (155 intervenciones) el 03/07/2023 18:10:56
El problema que estás experimentando al redimensionar el componente JList dentro del JSplitPane se debe a que estás definiendo las dimensiones mínimas, máximas y predeterminadas directamente en el evento componentResized, pero estas propiedades deben establecerse directamente en el componente JList.

Aquí hay una solución modificada que ajusta correctamente las dimensiones del JList al redimensionar la ventana:

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
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
 
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.WindowConstants;
 
public class ComVisor extends JFrame {
    private JList<String> imagesList;
    private JSplitPane mainPanel;
    private JScrollPane scrollPanelRight;
    private int width;
 
    public ComVisor(String nameApplication) {
        setFrame(nameApplication);
        setComponents();
    }
 
    private void setFrame(String nameApplication) {
        setLayout(new BorderLayout(1, 3));
        setTitle(nameApplication);
        setMinimumSize(new Dimension(400, 200));
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
        setLocationRelativeTo(null);
 
        this.addWindowListener(new java.awt.event.WindowAdapter() {
            @Override
            public void windowClosing(java.awt.event.WindowEvent e) {
                JOptionPane.showMessageDialog(ComVisor.this, nameApplication + "-Salida");
            }
        });
 
        this.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                width = getWidth();
                int listWidth = width / 3;
                int listMinWidth = width / 7;
                int listMaxWidth = width / 5 * 4;
 
                imagesList.setPreferredSize(new Dimension(listWidth, 0));
                imagesList.setMinimumSize(new Dimension(listMinWidth, 0));
                imagesList.setMaximumSize(new Dimension(listMaxWidth, 0));
 
                revalidate();
                repaint();
            }
        });
    }
 
    private void setComponents() {
        String[] a = { "dsdsdsd", "dsdsdkkhskj", "dskhkjdhskjdhksdh", "sdskdhskjhds" };
        JPanel p = new JPanel();
        imagesList = new JList<>(a);
        imagesList.setVisibleRowCount(100);
        scrollPanelRight = new JScrollPane(imagesList);
        mainPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPanelRight, p);
        add(mainPanel, BorderLayout.CENTER);
    }
 
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(() -> {
            new ComVisor("ComVisor").setVisible(true);
        });
    }
}

En esta solución, se establecen las dimensiones mínimas, máximas y predeterminadas del JList directamente en el método `setComponents()`, dentro de la clase `ComVisor`. Además, he realizado algunos ajustes menores en el código para mejorar la legibilidad y cumplir con las convenciones de nomenclatura en Java.

Espero que esto resuelva tu problema al redimensionar el JList dentro del JSplitPane.
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