Passar os valores de um jspinner para uma lista usando o java eclipse

6 respostas
E

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JSpinner;

import javax.swing.DefaultListModel;

import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JScrollPane;

import java.awt.event.ContainerAdapter;

import java.awt.event.ContainerEvent;

import javax.swing.ListModel;

import javax.swing.AbstractListModel;

public class Swingvetor {

private JFrame frame;

int vetor[]=new int[5];
DefaultListModel lista = new DefaultListModel();
int selecionado = 0;
/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				Swingvetor window = new Swingvetor();
				window.frame.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the application.
 */
public Swingvetor() {
	initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
	frame = new JFrame();
	frame.setBounds(100, 100, 450, 300);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.getContentPane().setLayout(null);
	
	JSpinner txtNum = new JSpinner();
	txtNum.setBounds(33, 36, 30, 20);
	frame.getContentPane().add(txtNum);
	
	JButton btnAdd = new JButton("Adicionar");
	btnAdd.setBounds(129, 35, 89, 23);
	frame.getContentPane().add(btnAdd);
	
	JButton btnRemove = new JButton("Remover");
	btnRemove.setBounds(129, 97, 89, 23);
	frame.getContentPane().add(btnRemove);
	
	JButton btnOrdem = new JButton("Ordem");
	btnOrdem.setBounds(129, 157, 89, 23);
	frame.getContentPane().add(btnOrdem);
	
	JLabel lblNewLabel = new JLabel("Vetor");
	lblNewLabel.setBounds(308, 39, 46, 14);
	frame.getContentPane().add(lblNewLabel);
	
	JLabel lblSelecionado = new JLabel("0");
	lblSelecionado.setBounds(346, 39, 46, 14);
	frame.getContentPane().add(lblSelecionado);
	//lstVetor.setBounds(308, 73, 82, 150);
	//frame.getContentPane().add(lstVetor);
			
	JList lstVetor = new JList();
	lstVetor.setModel(new AbstractListModel() {
		String[] values = new String[] {};
		public int getSize() {
			return values.length;
		}
		public Object getElementAt(int index) {
			return values[index];
		}
	});
	lstVetor.addContainerListener(new ContainerAdapter() {
		
	});
	JScrollPane lstVetorScrollPane = new JScrollPane(lstVetor);
	lstVetorScrollPane.setBounds(287, 64, 81, 168);
	frame.getContentPane().add(lstVetorScrollPane);
	
	
}

}

6 Respostas

I

Se você consultar a documentação (Class JSpinner), verá que o JSpinner retorna um Object ao se invocar o método getValue. Então, você pode converter o objeto para o valor desejado, como por exemplo, para String:

List<String> listagem = new ArrayList<>();

listagem.add(txtNum.getValue().toString());
lstVetor.setListData(listagem);

Obs.: de acordo com que experimentei em sala de aula e nos livros, é bom usar um padrão para nomear as variáveis que remeta ao tipo do componente e a sua função no sistema. Assim, por exemplo, via de regra, se usa txt para campos de texto (JTextField), txm (JFormattedTextField) - texto com máscara, txa (JTextArea), etc. de acordo com um certo padrão definido por você ou pela equipe. Supondo que o spinner seja destinado a definir a quantidade de alguma coisa, o nome mais descritivo seria: padrão para identificar que é um spinner + função no sistema. Logo:

JSpinner spnQuantidade = new JSpinner();

Mas é só uma observação…

E

Oi Iohannes,

muito obrigado!
Vou tentar aqui…
Sou novato no uso do Java, e ainda não me acostumei…

E

Você consegue identificar o que tá faltando em meu código. Ele é o exercício de vetores de Gustavo Guanabara…
Não estou conseguindo interpretar esse código para fazer as mudanças necessárias.

Preciso escrever os valores de um vetor de inteiros na lista, em que o Jspinner gera os valores e acrescenta na lista.

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JSpinner;

import javax.swing.DefaultListModel;

import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JScrollPane;

import java.awt.event.ContainerAdapter;

import java.awt.event.ContainerEvent;

import javax.swing.ListModel;

import javax.swing.AbstractListModel;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.Arrays;

public class Swingvetor {

private JFrame frame;

int vetor[]=new int[5];


DefaultListModel lista = new DefaultListModel();
int selecionado = 0;
/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				Swingvetor window = new Swingvetor();
				window.frame.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the application.
 */
public Swingvetor() {
	initialize();
	 for(int c = 0; c < vetor.length; c++) {
	    	lista.addElement(vetor[c]);
	    }
	}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
	frame = new JFrame();
	frame.setBounds(100, 100, 450, 300);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.getContentPane().setLayout(null);
	
	JSpinner txtNum = new JSpinner();
	txtNum.setBounds(33, 36, 30, 20);
	frame.getContentPane().add(txtNum);
			
	JButton btnAdd = new JButton("Adicionar");
	btnAdd.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			vetor[selecionado]=Integer.parseInt(txtNum.getValue().toString());
		    lista.removeAllElements();
		    for(int c = 0; c < vetor.length; c++) {
		    	lista.addElement(vetor[c]);
		    }
		}
	});
	btnAdd.setBounds(129, 35, 89, 23);
	frame.getContentPane().add(btnAdd);
	
	JButton btnRemove = new JButton("Remover");
	btnRemove.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			vetor[selecionado] = 0;
			lista.removeAllElements();
		    for(int c = 0; c < vetor.length; c++) {
		    	lista.addElement(vetor[c]);
		    }
		}
	});
	btnRemove.setBounds(129, 97, 89, 23);
	frame.getContentPane().add(btnRemove);
	
	JButton btnOrdem = new JButton("Ordem");
	btnOrdem.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			Arrays.sort(vetor);
		}
	});
	btnOrdem.setBounds(129, 157, 89, 23);
	frame.getContentPane().add(btnOrdem);
	
	JLabel lblNewLabel = new JLabel("Vetor");
	lblNewLabel.setBounds(308, 39, 46, 14);
	frame.getContentPane().add(lblNewLabel);
	
	JLabel lblSelecionado = new JLabel("0");
	lblSelecionado.setBounds(346, 39, 46, 14);
	frame.getContentPane().add(lblSelecionado);
	//lstVetor.setBounds(308, 73, 82, 150);
	//frame.getContentPane().add(lstVetor);
			
	JList lstVetor = new JList();
	lstVetor.addMouseListener(new MouseAdapter() {
		@Override
		public void mouseClicked(MouseEvent e) {
			selecionado = lstVetor.getSlectedIndex();
			lblSlecionado.setText("[" + selecionado + "]");
		}
	});
	lstVetor.setModel(new AbstractListModel() {
		
		String[] values = new String[] {};
		public int getSize() {
			return values.length;
		}
		public Object getElementAt(int index) {
			return values[index];
		}
	});
	lstVetor.addContainerListener(new ContainerAdapter() {
		
	});
	JScrollPane lstVetorScrollPane = new JScrollPane(lstVetor);
	lstVetorScrollPane.setBounds(287, 64, 81, 168);
	frame.getContentPane().add(lstVetorScrollPane);
	
}

}

I

Faça assim:

JButton btnAdd = new JButton("Adicionar");
btnAdd.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		vetor[selecionado] = Integer.parseInt(spnQuantidade.getValue().toString());
		lista.removeAllElements();
		for(int c = 0; c < vetor.length; c++) {
			lista.addElement(vetor[c]);
		}
		lstVetor.setListData(lista.toArray());
	}
});

Use o método setListData do JList e passe a lista como parâmetro transformando ela em array. Para funcionar, o JList deve ser uma variável externa ao método inicialize, caso contrário, a variável lstVetor não é encontrada, porque ela aparece depois do botão btnAdd e, como estão no mesmo método, são lidos na ordem em que são escritos. Logo, a variável lstVetor ainda não está disponível.
Eu não sei extamente de onde vem esse código, mas gostaria de analisá-lo direto da fonte, já quem tem algumas ‘questões’ estranhas, além dessa que te passei.

O código completo ficou assim:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import java.awt.event.ContainerAdapter;
import java.awt.event.ContainerEvent;
import javax.swing.ListModel;
import javax.swing.AbstractListModel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;

public class SwingVetor {
	private JFrame frame;
	int[] vetor = new int[5];

	DefaultListModel<Object> lista = new DefaultListModel<Object>();
	int selecionado = 0;
	/**
	* Launch the application.
	*/
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					SwingVetor window = new SwingVetor();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
	/**
	* Create the application.
	*/
	public SwingVetor() {
		initialize();
		for(int c = 0; c < vetor.length; c++) {
			lista.addElement(vetor[c]);
		}
	}
	
	/**
	* Initialize the contents of the frame.
	*/
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
		JSpinner spnQuantidade = new JSpinner();
		spnQuantidade.setBounds(33, 36, 30, 20);
		frame.getContentPane().add(spnQuantidade);
			
		JButton btnAdd = new JButton("Adicionar");
		btnAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				vetor[selecionado] = Integer.parseInt(spnQuantidade.getValue().toString());
				lista.removeAllElements();
				for(int c = 0; c < vetor.length; c++) {
					lista.addElement(vetor[c]);
				}
				lstVetor.setListData(lista.toArray());
			}
		});
		
		btnAdd.setBounds(129, 35, 89, 23);
		frame.getContentPane().add(btnAdd);
		
		JButton btnRemove = new JButton("Remover");
		btnRemove.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				vetor[selecionado] = 0;
				lista.removeAllElements();
				for(int c = 0; c < vetor.length; c++) {
					lista.addElement(vetor[c]);
				}
			}
		});
		
		btnRemove.setBounds(129, 97, 89, 23);
		frame.getContentPane().add(btnRemove);
		
		JButton btnOrdem = new JButton("Ordem");
		btnOrdem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Arrays.sort(vetor);
			}
		});
		
		btnOrdem.setBounds(129, 157, 89, 23);
		frame.getContentPane().add(btnOrdem);
		
		JLabel lblNewLabel = new JLabel("Vetor");
		lblNewLabel.setBounds(308, 39, 46, 14);
		frame.getContentPane().add(lblNewLabel);
		
		JLabel lblSelecionado = new JLabel("0");
		lblSelecionado.setBounds(346, 39, 46, 14);
		frame.getContentPane().add(lblSelecionado);
			
		lstVetor = new JList<Object>();
		lstVetor.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				selecionado = lstVetor.getSelectedIndex();
				lblSelecionado.setText("[" + selecionado + "]");
			}
		});
		
		lstVetor.setModel(new AbstractListModel<Object>() {
			
			String[] values = new String[] {};
			public int getSize() {
				return values.length;
			}
			
			public Object getElementAt(int index) {
				return values[index];
			}
		});
		
		/*lstVetor.addContainerListener(new ContainerAdapter() {
			@Override
			public void componentAdded(ContainerEvent e){
				System.out.println("->");
			}
		});*/
		
		JScrollPane lstVetorScrollPane = new JScrollPane(lstVetor);
		lstVetorScrollPane.setBounds(287, 64, 81, 168);
		frame.getContentPane().add(lstVetorScrollPane);
	}
	private JList<Object> lstVetor;
}

Rodando…

image

E

Oi Iohannes!

Boa noite!
Obrigado pela a atenção!!!
Eu fiz no Eclipse Version: 2019-12 (4.14.0)…
Ele montou sozinho o código, outros programas que fiz precisei modificar o local de onde as variáveis estavam sendo criadas.

E

Oi Iohannes,

fiz as mudanças que sugeriu…
Agora ele tá fazendo tudo que o exercício pede.

Obrigado!!!

Criado 6 de maio de 2020
Ultima resposta 8 de mai. de 2020
Respostas 6
Participantes 2