62,615
社区成员
发帖
与我相关
我的任务
分享
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
public class TextModel extends JPanel {
private static final long serialVersionUID = 4529266044762990227L;
private Calendar select;
private JPanel TextPanel;
private Font font = new Font("宋体", Font.PLAIN, 12);
private SimpleDateFormat sdf;
private boolean isShow = false;
private Popup pop;
private JComponent showDate;
private TextModel() {
select = Calendar.getInstance();
initPanel();
}
/**
*
* 是否允许用户选择
*
*/
public void setEnabled(boolean b) {
super.setEnabled(b);
showDate.setEnabled(b);
}
/**
* 得到当前选择框
*/
public Date getDate() {
return select.getTime();
}
public String getStrDate() {
return sdf.format(select.getTime());
}
public String getStrDate(String format) {
sdf = new SimpleDateFormat(format);
return sdf.format(select.getTime());
}
// 根据初始化的,初始化面板
private void initPanel() {
TextPanel = new JPanel(new BorderLayout());
TextPanel.setBorder(BorderFactory.createLineBorder(Color.BLUE));
JPanel jp1 = new JPanel(new BorderLayout());
jp1.setBackground(new Color(160, 185, 215));
JLabel title = new JLabel("补充条款:", JLabel.CENTER);
title.setFont(font);
title.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
jp1.setPreferredSize(new Dimension(175, 25));
jp1.add(title);
TextPanel.add(jp1, BorderLayout.NORTH);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setPreferredSize(new Dimension(175, 100));
TextPanel.add(scrollPane, BorderLayout.CENTER);
final JTextArea textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.grabFocus();
scrollPane.setViewportView(textArea);
JPanel jp3 = new JPanel(new BorderLayout());
jp3.setPreferredSize(new Dimension(175, 20));
jp3.setBackground(new Color(160, 185, 215));
final JLabel jl = new JLabel("OK");
jl.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("!!!!");
textArea.grabFocus();
textArea.requestFocusInWindow();
}
@Override
public void mouseEntered(MouseEvent e) {
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
@Override
public void mouseExited(MouseEvent e) {
setCursor(Cursor.getDefaultCursor());
}
@Override
public void mousePressed(MouseEvent e) {
jl.setForeground(Color.RED);
}
@Override
public void mouseReleased(MouseEvent e) {
jl.setForeground(Color.BLUE);
}
});
jl.setHorizontalAlignment(SwingConstants.CENTER);
jl.setFont(font);
jp3.add(jl, BorderLayout.CENTER);
TextPanel.add(jp3, BorderLayout.SOUTH);
this.addAncestorListener(new AncestorListener() {
// 只要祖先组件一移动,马上就让popup消失
public void ancestorMoved(AncestorEvent event) {
hidePanel();
}
@Override
public void ancestorAdded(AncestorEvent event) {
}
@Override
public void ancestorRemoved(AncestorEvent event) {
}
});
}
public void register(final JComponent showDate) {
this.showDate = showDate;
showDate.setRequestFocusEnabled(true);
showDate.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
showDate.requestFocusInWindow();
}
});
this.setBackground(Color.WHITE);
this.add(showDate, BorderLayout.CENTER);
this.setPreferredSize(new Dimension(90, 25));
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
showDate.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setCursor(new Cursor(Cursor.HAND_CURSOR));
showDate.setForeground(Color.RED);
}
}
public void mouseExited(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
showDate.setForeground(Color.BLACK);
}
}
public void mousePressed(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setForeground(Color.CYAN);
if (isShow) {
hidePanel();
} else {
showPanel(showDate);
}
}
}
public void mouseReleased(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setForeground(Color.BLACK);
}
}
});
showDate.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
hidePanel();
}
public void focusGained(FocusEvent e) {
}
});
}
// 隐藏选择面板
private void hidePanel() {
if (pop != null) {
isShow = false;
pop.hide();
pop = null;
}
}
// 显示选择面板
private void showPanel(Component owner) {
if (pop != null) {
pop.hide();
}
Point show = new Point(0, showDate.getHeight());
SwingUtilities.convertPointToScreen(show, showDate);
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
int x = show.x;
int y = show.y;
if (x < 0) {
x = 0;
}
if (x > size.width - 175) {
x = size.width - 175;
}
if (y < size.height - 170) {
} else {
y -= 188;
}
pop = PopupFactory.getSharedInstance().getPopup(owner, TextPanel, x, y);
pop.show();
isShow = true;
}
public static void main(String[] args) {
TextModel dateChooser1 = new TextModel();
TextModel dateChooser2 = new TextModel();
JTextField showDate1 = new JTextField("单击选择");
JLabel showDate2 = new JLabel("单击选择");
dateChooser1.register(showDate1);
dateChooser2.register(showDate2);
JFrame jf = new JFrame("测试选择器");
jf.getContentPane().add(showDate1, BorderLayout.NORTH);
jf.getContentPane().add(showDate2, BorderLayout.SOUTH);
jf.pack();
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}