📄 mymonthchooser.java
字号:
package org.signsmile.view.util;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Calendar;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JWindow;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class MyMonthChooser extends JWindow implements ChangeListener {
private static final long serialVersionUID = 1L;
private static final int width = 150; // 界面宽度
private static final int height = 90; // 界面高度
// 月历表格配色----------------//
private static final Color palletTableColor = Color.orange; // 日历表底色
private static final Color monthColor1 = Color.white;
private static final Color monthColor2 = Color.darkGray;
private static final Color BorderColor = Color.black; // 边框色
// 控制条配色------------------//
private static final Color controlLineColor = Color.pink; // 控制条底色
private static final Color controlTextColor = Color.white; // 控制条标签文字色
private static final Color rbBorderColor = Color.red; // 控制条边框色
private static final String YEAR = "年";
private static final String MONTH = "月";
private static final String title[] = {"", "", "", ""};
private static final String numbers[][] = { {"1", "2", "3", "4"},{ "5", "6", "7", "8"},{ "9", "10", "11", "12"}};
private JSpinner sprYYYY;
private JTable dateTable;
private int x, y;
private DefaultTableModel dateTableMd;
private static MyMonthChooser myMonthChooser;
private JTextField jTextField;
private MyMonthChooser() {
}
private MyMonthChooser(int x, int y, Window owner, JTextField jTextField) {
super(owner);
try {
viewInit();
this.jTextField = jTextField;
this.setBounds(x, y, width, height);
this.setVisible(true);
} catch (Exception exception) {
exception.printStackTrace();
}
}
public static MyMonthChooser getInstance(int x, int y, Window owner,
JTextField jTextField) {
if (myMonthChooser == null)
myMonthChooser = new MyMonthChooser(x, y, owner, jTextField);
else{
myMonthChooser.setLocation(x, y);
myMonthChooser.setJTextField(jTextField);
}
return myMonthChooser;
}
private void viewInit() {
JPanel jpNorth = new JPanel();
jpNorth.setFont(new Font("宋体", Font.PLAIN, 12));// 设置固定字体,以免调用环境改变影响界面美观
jpNorth.setBorder(BorderFactory.createLineBorder(Color.black));
jpNorth.setBackground(controlLineColor);
jpNorth.setLayout(new FlowLayout());
sprYYYY = new JSpinner();
sprYYYY.setEditor(new JSpinner.NumberEditor(sprYYYY, "####"));
sprYYYY.setBorder(BorderFactory.createLineBorder(rbBorderColor));
jpNorth.add(sprYYYY);
JLabel jLbyear = new JLabel(YEAR);
jLbyear.setForeground(controlTextColor);
jpNorth.add(jLbyear);
dateTable = new JTable();
dateTable.setAutoscrolls(false);
dateTable.setBorder(BorderFactory.createLineBorder(BorderColor));
dateTable.setRequestFocusEnabled(false);
dateTable.setRowHeight(20);
dateTable.setRowSelectionAllowed(true);
dateTable.setColumnSelectionAllowed(true);
dateTable.setShowGrid(false);
dateTable.setFont(new Font("楷体", Font.BOLD, 15));
dateTable.setBackground(palletTableColor);
// this.setAlwaysOnTop(true);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().setBackground(SystemColor.inactiveCaption);
this.getContentPane().add(jpNorth, BorderLayout.NORTH);
this.getContentPane().add(dateTable, BorderLayout.SOUTH);
initDates();
sprYYYY.addChangeListener(this);
dateTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Object value = dateTable.getValueAt(dateTable.getSelectedRow(),
dateTable.getSelectedColumn());
if (value != null)
jTextField.setText((new StringBuilder()).append(
sprYYYY.getValue()).append(YEAR).append(value).append(MONTH)
.toString());
if (e.getClickCount() == 1 && value != null)
showDialog(false);
}
});
drawTableColor();
}
private void drawTableColor() {
class MyCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
Component cell = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
// if ((column%2==0&&row%2==1)||(column%2==1&&row%2==0))
if (column%2==0)
cell.setForeground(monthColor1);
else {
cell.setForeground(monthColor2);
}
return cell;
}
}
MyCellRenderer myCellRenderer = new MyCellRenderer();
myCellRenderer.setHorizontalAlignment(SwingConstants.CENTER);
dateTable.setDefaultRenderer(dateTable.getColumnClass(1),myCellRenderer);
}
private void initDates() {
Calendar d = Calendar.getInstance();
sprYYYY.setValue(d.get(Calendar.YEAR));
int month = d.get(Calendar.MONTH);
x = month/4+1;
y = month%4+1;
try {
dateTableMd = new DefaultTableModel(numbers, title) {
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int pRow, int pCol) {
return false;
}
};
dateTable.setModel(dateTableMd);
selectedCell(x, y);
} catch (Exception e) {
e.printStackTrace();
}
}
private void selectedCell(int row, int col) {
row--;
col--;
dateTable.setRowSelectionInterval(row, row);
dateTable.setColumnSelectionInterval(col, col);
}
public void showDialog(boolean showOrhide) {
setVisible(showOrhide);
}
public void stateChanged(ChangeEvent arg0) {
}
public void setJTextField(JTextField textField) {
jTextField = textField;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -