Alguém sabe como faço para recuperar todos os anos ?
Ou pelo menos um periodo de anos… de 1990 a 2009…
Recuperar todos os anos
12 Respostas
Não tem como, os anos que se foram não voltam mais. Só se pode trabalhar agora para o futuro…
hehehehe, brincaideras a parte, o que você quer dizer com “recuperar os anos”?
for (int i = 1990; i <= 2009; ++i) {
}
é simples… preciso criar uma combo de anos…
mas ñ queria fazer um laço…
acredito que tenha outras formas de fazer isso…
Utilizando Calendar ou Date…
O jeito mais fácil é um laço mesmo. Não complique as coisas.
Não acha que essa combo vai ficar extensa? Usa um text field mesmo.
eu ñ to querendo complicar nd ñ…
a questão é q estamos em 2009, conseqüentemente ano vem é 2010
e a minha combo ñ vai ter 2010…
é claro eu poderia recuperar o ano em q estou e fazer o laço até o ano…
mas… ñ quero fazer isso…
Só ajustar qts anos pra trás vc quer
int current = Calendar.getInstance().get(Calendar.YEAR);
for (int i = current - 10; i <= current; i++) {
System.out.println("Ano: " + i);
}
Agora, se o usuário quer colocar 1980, não vai aparecer na combo
O que vc tem contra os laços?
Hahahaha, pois é, boa pergunta. Façamos sem laço então!
public void testYears() {
List<Integer> list = new ArrayList<Integer>();
int max = 10;
nextYears(list, max, Calendar.getInstance().get(Calendar.YEAR));
System.out.println(list);
}
public void nextYears(List<Integer> list, int max, int current) {
if (list.size() == max) {
return;
}
list.add(current--);
nextYears(list, max, current);
}
Existe uma forma de fazer isso criando um ComboBoxModel próprio. Evita também a recursão. Como não tenho eclipse e nem java aqui no trabalho, não posso testar. Mas em casa elaboro algo e posto aqui…
Bom, conforme prometido:
import java.awt.EventQueue;
import java.util.Calendar;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class FrameTeste extends JFrame {
public FrameTeste() {
super("Ano");
setSize(100, 60);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int anoAtual = Calendar.getInstance().get(Calendar.YEAR);
add(new JComboBox(new AnoComboboxModel(anoAtual, 1980)));
}
public static void main(String[] args) {
final FrameTeste frame = new FrameTeste();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
}
}
class AnoComboboxModel extends AbstractListModel implements ComboBoxModel
{
private int anoFinal;
private int anoInicial;
private int selected;
public AnoComboboxModel(int anoInicial, int anoFinal)
{
this.anoInicial = anoInicial;
this.anoFinal = anoFinal;
this.selected = anoInicial;
}
@Override
public Object getSelectedItem() {
return selected;
}
@Override
public void setSelectedItem(Object anItem) {
if (anItem instanceof Integer)
selected = ((Integer)anItem).intValue();
}
@Override
public Object getElementAt(int index) {
return anoInicial + (anoInicial < anoFinal ? index : -index);
}
@Override
public int getSize() {
return Math.abs(anoInicial - anoFinal)+1;
}
}
Você pode inverter os parâmetros de entrada dos anos para que a combo liste-os na ordem inversa. Aí no exemplo estou listando do ano atual até o ano de 1980. Evita um laço (que na verdade fica implícito, dentro da combo), recursão e até a existência de um List para guardar os valores. E também não usa Calendar ou Date, a não ser para pegar o ano atual.
Boa Vini! Acho que agora não temos como retrucar essa solução né!?!?! Kudos for you 