애플릿으로 짠거구 전에 C로 짠던걸 많이 이용했다(위키가 이럴땐 정말 좋다) 공부좀 열심히 해야쥐 ㅡ.ㅡ {{{~cpp import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; public class CalendarApplet extends JApplet { public void init() { Container contentPane = getContentPane(); CalendarPanel panel = new CalendarPanel(); contentPane.add(panel); } } class CalendarPanel extends JPanel { JPanel selectPanel; JPanel showPanel; JTextField tfYear; JComboBox cbMonth; int year; int month; int days; public CalendarPanel() { setLayout(new BorderLayout()); selectPanel = new JPanel(); showPanel = new JPanel(); tfYear = new JTextField(5); tfYear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { changeData(); } } ); selectPanel.add(tfYear); selectPanel.add(new JLabel("년")); cbMonth = new JComboBox(); cbMonth.setEditable(false); cbMonth.addItem("1"); cbMonth.addItem("2"); cbMonth.addItem("3"); cbMonth.addItem("4"); cbMonth.addItem("5"); cbMonth.addItem("6"); cbMonth.addItem("7"); cbMonth.addItem("8"); cbMonth.addItem("9"); cbMonth.addItem("10"); cbMonth.addItem("11"); cbMonth.addItem("12"); cbMonth.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { changeData(); } } ); selectPanel.add(cbMonth); selectPanel.add(new JLabel("월")); add(selectPanel, BorderLayout.NORTH); showPanel.setLayout(new GridLayout(7, 7)); add(showPanel, BorderLayout.CENTER); tfYear.setText(String.valueOf(Calendar.getInstance().get(Calendar.YEAR))); cbMonth.setSelectedIndex(Calendar.getInstance().get(Calendar.MONTH)); } public void alignDay() { int weekDay = (1 + (year - 1) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400)) % 7; for(int i = 0 ; i < month - 1 ; i++) { weekDay = (weekDay + monthDays(year, i + 1)) % 7; } showPanel.removeAll(); showPanel.add(new JLabel("일", SwingConstants.CENTER)); showPanel.add(new JLabel("월", SwingConstants.CENTER)); showPanel.add(new JLabel("화", SwingConstants.CENTER)); showPanel.add(new JLabel("수", SwingConstants.CENTER)); showPanel.add(new JLabel("목", SwingConstants.CENTER)); showPanel.add(new JLabel("금", SwingConstants.CENTER)); showPanel.add(new JLabel("토", SwingConstants.CENTER)); for (int i = 0; i < weekDay; i++) { showPanel.add(new JLabel("")); } for (int i = 0; i < days; i++) { showPanel.add(new JLabel(String.valueOf(i + 1), SwingConstants.CENTER)); } for (int i = 0; i < 42 - weekDay - days; i++) { showPanel.add(new JLabel("")); } showPanel.updateUI(); } public int monthDays(int ye, int mo) { if (mo == 1 || mo == 3 || mo == 5 || mo == 7 || mo == 8 || mo == 10 || mo == 12) return 31; else if (mo == 2) { if (isYunYear(ye) == true) return 29; return 28; } else return 30; } public boolean isYunYear(int ye) { if (ye % 4 == 0) { if (ye % 100 == 0) { if (ye % 400 == 0) return true; return false; } return true; } return false; } public void changeData() { if (!tfYear.getText().equals("")) { try { year = Integer.parseInt(tfYear.getText().trim()); month = Integer.parseInt(cbMonth.getSelectedItem().toString()); days = monthDays(year, month); alignDay(); } catch (Exception e) { //System.out.println(e); } } } public void paintComponent(Graphics g) { super.paintComponent(g); } } }}}