徒手写一个java日历程序

 也许你用VB可以拖拽出一个漂亮的日历程序,但你是否觉得这样拖来拖去一点也没有技术含量那?你是否知道日历程序的基本原理那?我想用一个JAVA程序解释一下它的基本原理,这里只是输出到控制台,不过我想只要知道了它的工作原理,你也可以用SWING做出一个漂亮的界面:

/*
 日历程序
 */

package calendartest;
//导入日期包
import java.util.Calendar;
import java.util.GregorianCalendar;

public class CalendarTest {

 public static void main(String[] args) {
  GregorianCalendar d=new GregorianCalendar();
  //获取当前日,月,星期
  int today=d.get(Calendar.DAY_OF_MONTH);
  int month=d.get(Calendar.MONTH);
  d.set(Calendar.DAY_OF_MONTH, 1);
  int weekday=d.get(Calendar.DAY_OF_WEEK);
  
  System.out.println("Sun Mon Tue Wed Thu Fri Sat");
  //未到当天星期数,则打印空格
  for(int i=Calendar.SUNDAY;i<weekday;i++){
   System.out.print("    ");
  }
  
  do{
   //输出日期,从1号开始记数
   int day=d.get(Calendar.DAY_OF_MONTH);
   System.out.printf("%3d",day);
   //如果为今天,则在前面打印*
   if(day==today)
    System.out.print("*");
   else
    System.out.print(" ");
   
   if(weekday==Calendar.SATURDAY)
    System.out.println();
   
   d.add(Calendar.DAY_OF_MONTH, 1);//输出后,日期加一
   weekday=d.get(Calendar.DAY_OF_WEEK);//再获取改变后日期的星期数
  }
  while(d.get(Calendar.MONTH)==month);//只要是当前月,则继续循环
  
  if(weekday!=Calendar.SUNDAY)
   System.out.println();

 }

}

Java GUI(图形用户界面)可以使用Java Swing库进行开发,绘画可以使用Java Graphics2D类。下面是一个简单的Java GUI程序,该程序提供了一个绘画区和一些工具,可以选择画笔颜色和笔刷大小,还有橡皮擦工具。 ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DrawingApp extends JFrame { private JPanel canvas; private JComboBox<String> colorChooser; private JComboBox<Integer> sizeChooser; private JToggleButton eraseButton; private Color currentColor = Color.black; private int currentSize = 5; public static void main(String[] args) { DrawingApp app = new DrawingApp(); app.setVisible(true); } public DrawingApp() { setTitle("Drawing App"); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // create canvas panel and add to frame canvas = new JPanel(); canvas.setBackground(Color.white); canvas.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { Graphics2D g = (Graphics2D) canvas.getGraphics(); g.setColor(currentColor); if (eraseButton.isSelected()) { g.setColor(canvas.getBackground()); } g.setStroke(new BasicStroke(currentSize, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); g.drawLine(e.getX(), e.getY(), e.getX(), e.getY()); } }); canvas.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { Graphics2D g = (Graphics2D) canvas.getGraphics(); g.setColor(currentColor); if (eraseButton.isSelected()) { g.setColor(canvas.getBackground()); } g.setStroke(new BasicStroke(currentSize, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); g.drawLine(e.getX(), e.getY(), e.getX(), e.getY()); } }); add(canvas, BorderLayout.CENTER); // create tool panel and add to frame JPanel toolPanel = new JPanel(); add(toolPanel, BorderLayout.NORTH); colorChooser = new JComboBox<String>(new String[] {"Black", "Red", "Green", "Blue"}); colorChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String color = (String) colorChooser.getSelectedItem(); switch (color) { case "Black": currentColor = Color.black; break; case "Red": currentColor = Color.red; break; case "Green": currentColor = Color.green; break; case "Blue": currentColor = Color.blue; break; } } }); toolPanel.add(new JLabel("Color:")); toolPanel.add(colorChooser); sizeChooser = new JComboBox<Integer>(new Integer[] {1, 3, 5, 10}); sizeChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { currentSize = (Integer) sizeChooser.getSelectedItem(); } }); toolPanel.add(new JLabel("Size:")); toolPanel.add(sizeChooser); eraseButton = new JToggleButton("Eraser"); toolPanel.add(eraseButton); } } ``` 该程序创建了一个JFrame窗口,并在其中添加了一个绘画区(JPanel)和一个工具区(JPanel)。绘画区使用MouseListener和MouseMotionListener监听鼠标事件,并使用Graphics2D类绘制图形。工具区提供了选择颜色、笔刷大小和橡皮擦工具的选项。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值