Bom dia,
Tenho um calendario, e necessito criar eventos para cada dia do mês, acontece que todos os botões
estão em um array.
Como farei para pegar cada botão do mês desejado (e chamar uma outra tela por exemplo) e criar
uma ação?
Exemplo se eu clicar no dia 20 de Abril, deverá chamar outra tela.
Segue minha classe:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Calendario extends JFrame implements ActionListener {
private static final ArrayList<String> meses;
static {
meses = new ArrayList<String>(12);
meses.add("Janeiro");
meses.add("Fevereiro");
meses.add("Marco");
meses.add("Abril");
meses.add("Maio");
meses.add("Junho");
meses.add("Julho");
meses.add("Agosto");
meses.add("Setembro");
meses.add("Outubro");
meses.add("Novembro");
meses.add("Dezembro");
};
private GregorianCalendar calendario;
private JLabel labelmes;
private JLabel labelano;
private JPanel Paneldia;
public Calendario ( GregorianCalendar d) {
calendario = d;
setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JButton[] buttons = new JButton[32];
panel2.add(buttons[0] = new JButton("\u22B2"));
panel2.add(labelmes =new JLabel(String.valueOf(meses.get(calendario.get(GregorianCalendar.MONTH))), JLabel.CENTER));
panel2.add(buttons[1] = new JButton("\u22B3"));
panel2.setBackground(Color.white);
panel1.add(buttons[2] = new JButton("\u22B4"));
panel1.add(labelano = new JLabel(String.valueOf(calendario.get(GregorianCalendar.YEAR)),JLabel.CENTER), BorderLayout.CENTER);
panel1.add(buttons[3] = new JButton("\u22B5"));
panel1.setBackground(Color.white);
for (int i=0; i<4; i++) {
buttons[i].addActionListener(this);
buttons[i].setBackground(Color.white);
buttons[i].setForeground(Color.blue);
}
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10));
panel.add(panel2);
panel.add(panel1);
panel.setBackground(Color.white);
Paneldia = new JPanel(new GridLayout(7, 7));
updateDayGrid();
add(panel, BorderLayout.NORTH);
add(Paneldia, BorderLayout.CENTER);
pack();
setVisible(true);
}
public GregorianCalendar getCal () {
return calendario;
}
public void actionPerformed (ActionEvent evt) {
String label = ((JButton) evt.getSource()).getText();
if (label.equals("\u22B2")) {
int m = meses.indexOf(labelmes.getText());
m = prevMonth(m);
labelmes.setText((String) meses.get(m));
updateDayGrid();
}
else if (label.equals("\u22B3")) {
int m = meses.indexOf(labelmes.getText());
m = nextMonth(m);
labelmes.setText((String) meses.get(m));
updateDayGrid();
}
else if (label.equals("\u22B4")) {
int y = 0;
try {
y = Integer.parseInt(labelano.getText());
}
catch (NumberFormatException e) {
System.err.println(e.toString());
}
labelano.setText(String.valueOf(--y));
updateDayGrid();
}
else if (label.equals("\u22B5")) {
int y = 0;
try {
y = Integer.parseInt(labelano.getText());
}
catch(Exception e){}
labelano.setText(String.valueOf(++y));
updateDayGrid();
}
else {
int m = meses.indexOf(labelmes.getText());
int y = 0;
int d = 0;
try {
y = Integer.parseInt(labelano.getText());
d = Integer.parseInt(label);
}
catch(Exception e){}
calendario = new GregorianCalendar(y, m, d);
calendario.setLenient(false);
}
}
private void updateDayGrid () {
Paneldia.removeAll();
int m = meses.indexOf(labelmes.getText());
int y = 0;
try {
y = Integer.parseInt(labelano.getText());
}
catch(Exception e){}
GregorianCalendar temp = new GregorianCalendar(y, m, 1);
temp.setLenient(false);
int offset = 0;
switch(temp.get(GregorianCalendar.DAY_OF_WEEK)) {
case GregorianCalendar.SUNDAY : offset = 0; break;
case GregorianCalendar.MONDAY : offset = 1; break;
case GregorianCalendar.TUESDAY : offset = 2; break;
case GregorianCalendar.WEDNESDAY : offset = 3; break;
case GregorianCalendar.THURSDAY : offset = 4; break;
case GregorianCalendar.FRIDAY : offset = 5; break;
case GregorianCalendar.SATURDAY : offset = 6; break;
}
String daynames[]={"Dom","Seg","Ter","Qua","Qui","Sex","Sab"};
JLabel l[]=new JLabel[7];
for(int i=0;i<7;i++){
l[i]=new JLabel(daynames[i], JLabel.CENTER);
Paneldia.add(l[i]);
l[0].setForeground(Color.red);
l[i].setForeground(Color.black);
}
for (int i=1; i<=offset; i++) {
Paneldia.add(new JLabel(""));
}
JButton day;
for (int i=1; i<=getLastDay(); i++) {
Paneldia.add(day = new JButton(String.valueOf(i)));
day.addActionListener(this);
day.setForeground(Color.blue);
day.setBackground(Color.white);
Paneldia.setBackground(Color.white);
if (i == calendario.get(Calendar.DATE) &&
m == calendario.get(Calendar.MONTH) &&
y == calendario.get(Calendar.YEAR)) {
day.setForeground(Color.red);
}
}
for (int i=(offset+getLastDay()+1); i<=42; i++) {
Paneldia.add(new JLabel(""));
}
repaint();
}
private int nextMonth (int month) {
if (month == 11) {
return(0);
}
return(++month);
}
private int prevMonth (int month) {
if (month == 0) {
return(11);
}
return(--month);
}
private int getLastDay () {
int m = (meses.indexOf(labelmes.getText()) + 1);
int y = 0;
try {
y = Integer.parseInt(labelano.getText());
}
catch(Exception e){}
if ((m==4) || (m==6) || (m==9) || (m==11)) {
return(30);
}
else if (m==2) {
if (calendario.isLeapYear(y)) {
return(29);
}
return(28);
}
return(31);
}
@SuppressWarnings("unused")
public static void main(String[]args){
GregorianCalendar cal=new GregorianCalendar();
Calendario e =new Calendario(cal);
}
}