swing项目源码(基于swing)
本文目录一览:
java swing 日历控件怎么实现 最好是源码
源代码:
//DatePicker.java
package com.kxsoft.component;
import java.awt.*;
import java.awt.event.*;
import java.util.GregorianCalendar;
import java.util.Date;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.FieldPosition;
import javax.swing.*;
import javax.swing.plaf.BorderUIResource;
public final class DatePicker extends JPanel {
private static final long serialVersionUID = 1L;
private static final int startX = 10;
private static final int startY = 60;
private static final Font smallFont = new Font("Dialog", Font.PLAIN, 10);
private static final Font largeFont = new Font("Dialog", Font.PLAIN, 12);
private static final Insets insets = new Insets(2, 2, 2, 2);
private static final Color highlight = new Color(255, 255, 204);
private static final Color white = new Color(255, 255, 255);
private static final Color gray = new Color(204, 204, 204);
private Component selectedDay = null;
private GregorianCalendar selectedDate = null;
private GregorianCalendar originalDate = null;
private boolean hideOnSelect = true;
private final JButton backButton = new JButton();
private final JLabel monthAndYear = new JLabel();
private final JButton forwardButton = new JButton();
private final JLabel[] dayHeadings = new JLabel[]{
new JLabel("日"),
new JLabel("一"),
new JLabel("二"),
new JLabel("三"),
new JLabel("四"),
new JLabel("五"),
new JLabel("六")};
private final JLabel[][] daysInMonth = new JLabel[][]{
{new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel()},
{new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel()},
{new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel()},
{new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel()},
{new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel()},
{new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel(),
new JLabel()}
};
private final JButton todayButton = new JButton();
private final JButton cancelButton = new JButton();
public DatePicker() {
super();
selectedDate = getToday();
init();
}
public DatePicker(final Date initialDate) {
super();
if (null == initialDate)
selectedDate = getToday();
else
(selectedDate = new GregorianCalendar()).setTime(initialDate);
originalDate = new GregorianCalendar(
selectedDate.get(Calendar.YEAR),
selectedDate.get(Calendar.MONTH),
selectedDate.get(Calendar.DATE));
init();
}
public boolean isHideOnSelect() {
return hideOnSelect;
}
public void setHideOnSelect(final boolean hideOnSelect) {
if (this.hideOnSelect != hideOnSelect) {
this.hideOnSelect = hideOnSelect;
initButtons(false);
}
}
public Date getDate() {
if (null != selectedDate)
return selectedDate.getTime();
return null;
}
private void init() {
setLayout(new AbsoluteLayout());
this.setMinimumSize(new Dimension(161, 226));
this.setMaximumSize(getMinimumSize());
this.setPreferredSize(getMinimumSize());
this.setBorder(new BorderUIResource.EtchedBorderUIResource());
backButton.setFont(smallFont);
backButton.setText("");
backButton.setMargin(insets);
backButton.setDefaultCapable(false);
backButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
onBackClicked(evt);
}
});
add(backButton, new AbsoluteConstraints(10, 10, 20, 20));
monthAndYear.setFont(largeFont);
monthAndYear.setHorizontalAlignment(JTextField.CENTER);
monthAndYear.setText(formatDateText(selectedDate.getTime()));
add(monthAndYear, new AbsoluteConstraints(30, 10, 100, 20));
forwardButton.setFont(smallFont);
forwardButton.setText("");
forwardButton.setMargin(insets);
forwardButton.setDefaultCapable(false);
forwardButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
onForwardClicked(evt);
}
});
add(forwardButton, new AbsoluteConstraints(130, 10, 20, 20));
int x = startX;
for (int ii = 0; ii dayHeadings.length; ii++) {
dayHeadings[ii].setOpaque(true);
dayHeadings[ii].setBackground(Color.LIGHT_GRAY);
dayHeadings[ii].setForeground(Color.WHITE);
dayHeadings[ii].setHorizontalAlignment(JLabel.CENTER);
add(dayHeadings[ii], new AbsoluteConstraints(x, 40, 21, 21));
x += 20;
}
x = startX;
int y = startY;
for (int ii = 0; ii daysInMonth.length; ii++) {
for (int jj = 0; jj daysInMonth[ii].length; jj++) {
daysInMonth[ii][jj].setOpaque(true);
daysInMonth[ii][jj].setBackground(white);
daysInMonth[ii][jj].setFont(smallFont);
daysInMonth[ii][jj].setHorizontalAlignment(JLabel.CENTER);
daysInMonth[ii][jj].setText("");
daysInMonth[ii][jj].addMouseListener(new MouseAdapter() {
public void mouseClicked(final MouseEvent evt) {
onDayClicked(evt);
}
});
add(daysInMonth[ii][jj], new AbsoluteConstraints(x, y, 21, 21));
x += 20;
}
x = startX;
y += 20;
}
initButtons(true);
calculateCalendar();
}
private void initButtons(final boolean firstTime) {
if (firstTime) {
final Dimension buttonSize = new Dimension(68, 24);
todayButton.setText("今天");
todayButton.setMargin(insets);
todayButton.setMaximumSize(buttonSize);
todayButton.setMinimumSize(buttonSize);
todayButton.setPreferredSize(buttonSize);
todayButton.setDefaultCapable(true);
todayButton.setSelected(true);
todayButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
onToday(evt);
}
});
cancelButton.setText("取消");
cancelButton.setMargin(insets);
cancelButton.setMaximumSize(buttonSize);
cancelButton.setMinimumSize(buttonSize);
cancelButton.setPreferredSize(buttonSize);
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
onCancel(evt);
}
});
} else {
this.remove(todayButton);
this.remove(cancelButton);
}
求一个利用mvc模式基于swing设计的一个小项目的源码,只要很小就可以,用于学习mvc模式
Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
MVC是一种Web开发模式,两者不搭边。
求Swing双缓冲的实现源码
java.nio包里的东西吧,Swing双缓冲使用那个包里的东西实现的
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class MyPanel extends JPanel {
Image doubleBuffer;
int clickCount;
private static final Dimension pSize = new Dimension(300, 300);
public void paint(Graphics g) {
long t1 = System.currentTimeMillis();
if (doubleBuffer == null) {
doubleBuffer = createImage(this.getWidth(), this.getHeight());
}
g.drawImage(doubleBuffer, 0, 0, null);
long t2 = System.currentTimeMillis();
System.out.println("Render consumed " + (t2 - t1) + " milliseconds");
}
public Dimension getPreferredSize()
{
return pSize;
}
public void changeInternalStatus()
{
Graphics g2 = doubleBuffer.getGraphics();
//更改绘图......;
g2.drawLine(0, clickCount, doubleBuffer.getWidth(null), clickCount);
clickCount += 5;
g2.dispose();
repaint();
}
public static void main(String[] args) {
final MyPanel p = new MyPanel();
JFrame f = new JFrame();
JMenuBar mb = new JMenuBar();
JMenu m = new JMenu("Test");
mb.add(m);
JMenuItem mi = new JMenuItem("Draw in off screen");
m.add(mi);
mi.addActionListener(new ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e) {
p.changeInternalStatus();
}
});
f.setJMenuBar(mb);
f.setContentPane(p);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.show();
}
}
JComponent默认实现了double buffering,如果你觉得不满意,你可以参考一下JComponent的paintDoubleBuffered方法。