jeg får en nullpointerexception!
Hej, jeg kan ikke lige finde ud af hvad der sker her. Jeg får en nullpointerexception i metoden setSelectedDate() ( i changes.firePropertyChange("SelectedDate", date1, date) ). Jeg bruger en go klasse til at starte med.public class Go {
public static void main(String args[]) {
JCalendarPanel director = new JCalendarPanel();
}
}
HEr er så det kode der er bøvl med!
package Kalender;
/**
* @author JohandySatan
*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class JCalendarPanel extends JFrame
implements ActionListener
{
private static final int BUTTON_COUNT = 42;
private static final int LABEL_COUNT = 7;
private JButton days[];
private JLabel dayOfWeekLabel[];
private JButton selectedButton;
private JComboBox monthChoice;
private JLabel yearLabel;
private int selectedMonth;
private int selectedYear;
private int selectedDay;
private int cellHeight;
private int cellWidth;
private int sundayColumnIndex;
private JPanel headerPanel;
private JPanel calendarGridPanel;
private JButton nextYearButton;
private JButton prevYearButton;
private JButton nextMonthButton;
private JButton prevMonthButton;
private static final int numDays[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31};
private Vector months;
private Date selectedDate, date1, date;
private PropertyChangeSupport changes;
public JCalendarPanel()
{
super("dav Gamli");
days = new JButton[42]; //knap array
dayOfWeekLabel = new JLabel[7]; //Label array
selectedButton = null;
sundayColumnIndex = 0;
months = new Vector(12); //månedsvektor 12 måneder som udgangspunkt
selectedDate = new Date();
setFont(new Font("Dialog", 0, 12));
FontMetrics fontmetrics = getFontMetrics(getFont());
cellHeight = fontmetrics.getHeight() + 10;
cellWidth = fontmetrics.stringWidth("WWW") + 10;
getContentPane().setLayout(new BorderLayout());
headerPanel = new JPanel(); //lav JPanel, bestem layout og tilføj nord
headerPanel.setLayout(new FlowLayout());
calendarGridPanel = new JPanel(); //lav JPanel, bestem layout og tilføj center
calendarGridPanel.setLayout(new GridLayout(7, 7));
Insets insets = new Insets(1, 1, 1, 1);
yearLabel = new JLabel("");
//knapper får billede, placering margen og actionlistener
nextMonthButton = new JButton("ja tryk");
nextMonthButton.setAlignmentY(0.5F);
nextMonthButton.setMargin(insets);
nextMonthButton.addActionListener(this);
prevMonthButton = new JButton("ja tryk her");
prevMonthButton.setAlignmentY(0.5F);
prevMonthButton.setMargin(insets);
prevMonthButton.addActionListener(this);
nextYearButton = new JButton("tryk nu");
nextYearButton.setAlignmentY(0.5F);
nextYearButton.setMargin(insets);
nextYearButton.addActionListener(this);
prevYearButton = new JButton("halloo");
prevYearButton.setAlignmentY(0.5F);
prevYearButton.setMargin(insets);
prevYearButton.addActionListener(this);
buildMonths(); //kalder metoden buildmonths
monthChoice = new JComboBox(months); //laver en combobox
monthChoice.addActionListener(this);
headerPanel.add(prevYearButton); //tilføjer knapper og combobox
headerPanel.add(prevMonthButton);
headerPanel.add(monthChoice);
headerPanel.add(yearLabel);
headerPanel.add(nextMonthButton);
headerPanel.add(nextYearButton);
Container contentPane = super.getContentPane();
contentPane.add("North",headerPanel);
contentPane.add("Center",calendarGridPanel);
buildDays();
buildCells();
date = new Date();
date1 = new Date();
setSelectedDate(date);
updateDisplay();
setSize(500,500);
setVisible(true);
}//construkteren
public void addPropertyChangeListener(PropertyChangeListener propertychangelistener)
{
changes.addPropertyChangeListener(propertychangelistener);
}
private void buildCells()
{
int i = sundayColumnIndex;
for(int j = 0; j < 42; j++)
{
JButton jbutton = new JButton(" ");
jbutton.setEnabled(false);
jbutton.setSize(cellWidth, cellHeight);
jbutton.addActionListener(this);
jbutton.setSelected(false);
jbutton.setBorderPainted(false);
if(j == i)
{
jbutton.setForeground(Color.red);
i += 7;
}
calendarGridPanel.add(jbutton);
days[j] = jbutton;
}
}
private void buildDays()
{
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpledateformat = (SimpleDateFormat)DateFormat.getDateInstance(0);
simpledateformat.applyPattern("EEE");
boolean flag = false;
int i = calendar.getFirstDayOfWeek();
for(int j = 0; j < 7; j++)
{
if(i == 1)
calendar.set(1997, 5, j + 1);
else
calendar.set(1997, 8, j + 1);
StringTokenizer stringtokenizer = new StringTokenizer(simpledateformat.format(calendar.getTime()));
JLabel jlabel = new JLabel(stringtokenizer.nextElement().toString(), 0);
jlabel.setSize(cellWidth, cellHeight);
if(!flag && calendar.get(7) == 1)
{
jlabel.setForeground(Color.red);
sundayColumnIndex = j;
flag = true;
}
calendarGridPanel.add(jlabel);
dayOfWeekLabel[j] = jlabel;
}
}
private void buildMonths()
{
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpledateformat = (SimpleDateFormat)DateFormat.getDateInstance(0);
simpledateformat.applyPattern("MMMM");
for(int i = 0; i < 12; i++)
{
calendar.set(1997, i, 2);
months.addElement(simpledateformat.format(calendar.getTime()));
}
}
//finder hvor mange dage der er i en månede ud fra int array numdays[], og tager højde for skudår.
private int getDaysInMonth(int i, int j)
{
int k = j;
int l = numDays[i];
if(i == 1 && k % 4 == 0 && (k % 100 != 0 || k % 400 == 0))
l = 29;
return l;
}
public Date getSelectedDate()
{
Calendar calendar = Calendar.getInstance();
calendar.set(selectedYear, selectedMonth, selectedDay);
return calendar.getTime();
}
private void lastMonth()
{
setButtonState(selectedButton, false);
selectedButton = null;
if(--selectedMonth < 0)
{
selectedMonth = 11;
selectedYear--;
}
Calendar calendar = Calendar.getInstance();
calendar.set(selectedYear, selectedMonth, selectedDay);
setSelectedDate(calendar.getTime());
}
private void lastYear()
{
setButtonState(selectedButton, false);
selectedButton = null;
selectedYear--;
Calendar calendar = Calendar.getInstance();
calendar.set(selectedYear, selectedMonth, selectedDay);
setSelectedDate(calendar.getTime());
}
private void nextMonth()
{
setButtonState(selectedButton, false);
selectedButton = null;
if(++selectedMonth > 11)
{
selectedMonth = 0;
selectedYear++;
}
Calendar calendar = Calendar.getInstance();
calendar.set(selectedYear, selectedMonth, selectedDay);
setSelectedDate(calendar.getTime());
}
private void nextYear()
{
setButtonState(selectedButton, false);
selectedButton = null;
selectedYear++;
Calendar calendar = Calendar.getInstance();
calendar.set(selectedYear, selectedMonth, selectedDay);
setSelectedDate(calendar.getTime());
}
public void actionPerformed(ActionEvent actionevent)
{
Object obj = actionevent.getSource();
if(obj == nextMonthButton)
{
nextMonth();
return;
}
if(obj == prevMonthButton)
{
lastMonth();
return;
}
if(obj == nextYearButton)
{
nextYear();
return;
}
if(obj == prevYearButton)
{
lastYear();
return;
}
if(obj == monthChoice)
{
JComboBox jcombobox = (JComboBox)obj;
selectedMonth = jcombobox.getSelectedIndex();
setButtonState(selectedButton, false);
selectedButton = null;
Calendar calendar = Calendar.getInstance();
calendar.set(selectedYear, selectedMonth, selectedDay);
setSelectedDate(calendar.getTime());
return;
}
if(obj instanceof JButton)
{
for(int i = 0; i < 42; i++)
if(obj == days[i])
{
if(selectedButton != null)
setButtonState(selectedButton, false);
selectedButton = days[i];
setButtonState(selectedButton, true);
selectedDay = Integer.parseInt(days[i].getText());
Calendar calendar1 = Calendar.getInstance();
calendar1.set(selectedYear, selectedMonth, selectedDay);
setSelectedDate(calendar1.getTime());
return;
}
}
}
protected String paramString()
{
StringBuffer stringbuffer = new StringBuffer("selectedDate=");
SimpleDateFormat simpledateformat = (SimpleDateFormat)DateFormat.getDateInstance(0);
stringbuffer.append(simpledateformat.format(selectedDate));
stringbuffer.append(", locale=");
stringbuffer.append(Locale.getDefault().getDisplayName());
return stringbuffer.toString();
}
public void removePropertyChangeListener(PropertyChangeListener propertychangelistener)
{
changes.removePropertyChangeListener(propertychangelistener);
}
private void setButtonState(JButton jbutton, boolean flag)
{
if(jbutton != null)
{
jbutton.setBorderPainted(flag);
jbutton.setSelected(flag);
}
}
public void setSelectedDate(Date date)
{
if(date != null)
{
date1 = selectedDate;
selectedDate = date;
Calendar calendar = Calendar.getInstance();
calendar.setTime(selectedDate);
selectedMonth = calendar.get(2);
selectedYear = calendar.get(1);
selectedDay = calendar.get(5);
changes.firePropertyChange("selectedDate", date1, date);
updateDisplay();
}
}
public String toString()
{
return getClass().getName() + "[" + paramString() + "]";
}
private void updateDisplay()
{
Calendar calendar = Calendar.getInstance();
calendar.set(selectedYear, selectedMonth, 1);
Date date = calendar.getTime();
calendar.setTime(date);
int i = calendar.get(7) - calendar.getFirstDayOfWeek();
int j = 1;
int k = getDaysInMonth(selectedMonth, selectedYear);
for(int l = 0; l < 42; l++)
{
JButton jbutton = days[l];
if(l < i)
{
jbutton.setVisible(false);
} else
{
jbutton.setText(Integer.toString(j));
if(j == selectedDay)
{
if(selectedButton != null)
setButtonState(selectedButton, false);
selectedButton = jbutton;
setButtonState(selectedButton, true);
}
if(j <= k)
{
jbutton.setEnabled(true);
jbutton.setVisible(true);
j++;
} else
{
jbutton.setVisible(false);
}
}
}
yearLabel.setText(Integer.toString(selectedYear));
monthChoice.setSelectedIndex(selectedMonth);
}//updatedisplay
}//public class
