Java swing 常用代码片段:
(1)复制全部
JButton copyAll=new JButton("复制全部");
copyAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String content=area2.getText();
if(ValueWidget.isNullOrEmpty(content)){
return;
}
WindowUtil.setSysClipboardText(content);
}
});
public static void setSysClipboardText(String writeMe)
{
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable tText = new StringSelection(writeMe);
clip.setContents(tText, null);
}
获取一个"复制"按钮
/***
* Get a copy button.
*
* @param tf
* @return
*/
public static JButton getCopyBtn(final JTextComponent ta) {
JButton copyBtn = new JButton(MenuUtil2.ACTION_STR_COPY);
copyBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(ValueWidget.isNullOrEmpty(ta)){
ToastMessage toastMessage = new ToastMessage("文本框为null,请确认文本框是否已经创建",3000,Color.red);
toastMessage.setVisible(true);
}else{
String input = ta.getText();
if (!ValueWidget.isNullOrEmpty(input)) {
WindowUtil.setSysClipboardText(input);
}
}
}
});
return copyBtn;
}
(2)黏贴
btnPasteAfterDel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String content = WindowUtil.getSysClipboardText();
if (ValueWidget.isNullOrEmpty(content)) {
return;
}
getTextArea().setText(content);
}
});
获取一个黏贴按钮:
/***
* Get a paste button.
*
* @param ta
* @return
*/
public static JButton getPasteBtn(final JTextComponent ta) {
JButton copyBtn = new JButton(MenuUtil2.ACTION_STR_PASTE);
copyBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String input = WindowUtil.getSysClipboardText();
if (!ValueWidget.isNullOrEmpty(input)) {
ta.setText(input);
}
}
});
return copyBtn;
}
(3)给JTextArea 增加快捷键
final JTextArea ta=getTextArea();
KeyListener[] keyListeners=ta.getKeyListeners();
ta.addKeyListener(new KeyAdapter() {
private long lastTimeMillSencond;
private long lastTimeMillSencondCtrl;
private long lastTimeMillSencondEsc;
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_A/*全选*/
||e.getKeyCode() == KeyEvent.VK_C/* 复制 */
||e.getKeyCode() == KeyEvent.VK_F/*格式化*/
||e.getKeyCode() == KeyEvent.VK_Z/*剪切*/
||e.getKeyCode() == KeyEvent.VK_V){
// System.out.println(e.getKeyCode());
lastTimeMillSencondCtrl=0;
}
if(e.isShiftDown()){
if(lastTimeMillSencond==0){
lastTimeMillSencond=System.currentTimeMillis();
}else{
long currentTime=System.currentTimeMillis();
long delta=currentTime-lastTimeMillSencond;
if(MenuUtil2.isDoubleClick(delta)){
// System.out.println("双击Shift");
lastTimeMillSencond=0;
String selectContent = ta.getSelectedText();
if(ValueWidget.isNullOrEmpty(selectContent)){
return;
}
selectContent=SystemHWUtil.deleteQuotes(selectContent);
ta.replaceSelection(selectContent);
}else{
lastTimeMillSencond=System.currentTimeMillis();
}
}
}else if(e.isControlDown()&&(e.getKeyCode() != KeyEvent.VK_V/*86 */&&e.getKeyCode() != KeyEvent.VK_Z/*90*/
&&e.getKeyCode() != KeyEvent.VK_C/*67*/&&e.getKeyCode() != KeyEvent.VK_A/*65*/)){//双击Ctrl
// System.out.println(e.getKeyCode());
// System.out.println("lastTimeMillSencondCtrl:"+lastTimeMillSencondCtrl);
if(lastTimeMillSencondCtrl==0){
lastTimeMillSencondCtrl=System.currentTimeMillis();
}else{
long currentTime=System.currentTimeMillis();
long delta=currentTime-lastTimeMillSencondCtrl;
// System.out.println(lastTimeMillSencondCtrl+" "+currentTime+" "+delta);
if(MenuUtil2.isDoubleClick(delta)){
System.out.println("双击Ctrl");
lastTimeMillSencondCtrl=0;
String selectContent = ta.getSelectedText();
if(ValueWidget.isNullOrEmpty(selectContent)){
return;
}
quotesEscape(ta,false);
}else{
lastTimeMillSencondCtrl=System.currentTimeMillis();
}
}
}else if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
if(lastTimeMillSencondEsc==0){
lastTimeMillSencondEsc=System.currentTimeMillis();
}else{
long currentTime=System.currentTimeMillis();
if(MenuUtil2.isDoubleClick(currentTime-lastTimeMillSencondEsc)){
// System.out.println("双击Esc");
lastTimeMillSencondEsc=0;
String content = ta.getText();
if(ValueWidget.isNullOrEmpty(content)){
return;
}
boolean isEditable=ta.isEditable();
ta.setEditable(!isEditable);
}else{
lastTimeMillSencondEsc=System.currentTimeMillis();
}
}
}
}
});
ta.requestFocus();
MenuUtil2.isDoubleClick 实现如下:
/***
* 通过时间间隔来判断是否是双击(不是鼠标,是键盘)
* @param delta
* @return
*/
public static boolean isDoubleClick(long delta){
return (delta<300&&delta>100);
}
(4)使JTextArea 自动换行
resultTextPane = new AssistPopupTextArea();
resultTextPane.setLineWrap(true);
resultTextPane.setWrapStyleWord(true);
(5)设置表格数据
private void setTableData2(Object[][] datas) {
DefaultTableModel model = new DefaultTableModel(datas, columnNames);
parameterTable_1.setModel(model);
this.parameterTable_1.setRowHeight(30);
rendTable();
}
(6)获取表格的数据
/***
* 获取表格中的请求要素
*
* @return
*/
protected Object[][] getParameter4Table(){
TableModel model= parameterTable_1.getModel();
int rowCount = model.getRowCount();//参数的个数
int columnCount=model.getColumnCount();
Object[][] data2 = new Object[rowCount][];
for (int rowIndex = 0; rowIndex< rowCount; rowIndex++) {
if (!ValueWidget.isNullOrEmpty(model.getValueAt(rowIndex, 0))) {
Object[] objs = new Object[columnCount];
for (int j = 0; j < columnCount; j++) {
Object val = model.getValueAt(rowIndex, j);
if (!ValueWidget.isNullOrEmpty(val)) {
objs[j] = val;
}
}
data2[rowIndex] = objs;
}
}
System.out.println(data2.length);
return data2;
}
(7)获取组件对话框中的数据
String newName = JOptionPane.showInputDialog(ta.getParent()/*应该是JFrame*/,
"请输入图片高度:", ta.getHeight());
if (newName != null)
{
if (newName.equals("")) {
ToastMessage toastMessage = new ToastMessage("file name can not be empty.",3000,Color.red);
toastMessage.setVisible(true);
return;
}
specifiedHeight=Integer.parseInt(newName);
}else{/* indicate [cancel] button has been clicked */
ToastMessage toastMessage = new ToastMessage("已取消",2000,Color.red);
toastMessage.setVisible(true);
return;
}
(8)一个简单的模态窗口(对话框)
package com.yunma.dialog;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import com.common.util.SystemHWUtil;
import com.string.widget.util.ValueWidget;
import com.swing.component.AssistPopupTextArea;
import com.swing.component.AssistPopupTextField;
import com.swing.component.ComponentUtil;
import com.swing.dialog.GenericDialog;
public class GenerateMD5Dialog extends GenericDialog {
private static final long serialVersionUID = -4151740071609032069L;
private JPanel contentPane;
private AssistPopupTextField sourceTxt;
private JComboBox<String> encodingComboBox;
private AssistPopupTextArea resultTextArea;
/**
* Launch the application.
*//*
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GenerateMD5Dialog frame = new GenerateMD5Dialog();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}*/
/**
* Create the frame.
*/
public GenerateMD5Dialog(boolean modal) {
setTitle("生成MD5值");
setModal(modal);
setLoc(450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{0, 0, 0, 0};
gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0};
gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
contentPane.setLayout(gbl_contentPane);
JLabel label = new JLabel("原文本");
GridBagConstraints gbc_label = new GridBagConstraints();
gbc_label.insets = new Insets(0, 0, 5, 5);
gbc_label.gridx = 0;
gbc_label.gridy = 0;
contentPane.add(label, gbc_label);
sourceTxt = new AssistPopupTextField();
GridBagConstraints gbc_sourceTxt = new GridBagConstraints();
gbc_sourceTxt.insets = new Insets(0, 0, 5, 0);
gbc_sourceTxt.fill = GridBagConstraints.HORIZONTAL;
gbc_sourceTxt.gridx = 2;
gbc_sourceTxt.gridy = 0;
contentPane.add(sourceTxt, gbc_sourceTxt);
sourceTxt.setColumns(10);
JLabel label_1 = new JLabel("文件编码");
GridBagConstraints gbc_label_1 = new GridBagConstraints();
gbc_label_1.insets = new Insets(0, 0, 5, 5);
gbc_label_1.gridx = 0;
gbc_label_1.gridy = 1;
contentPane.add(label_1, gbc_label_1);
encodingComboBox = new JComboBox<String>();
GridBagConstraints gbc_encodingComboBox = new GridBagConstraints();
gbc_encodingComboBox.insets = new Insets(0, 0, 5, 0);
gbc_encodingComboBox.fill = GridBagConstraints.HORIZONTAL;
gbc_encodingComboBox.gridx = 2;
gbc_encodingComboBox.gridy = 1;
contentPane.add(encodingComboBox, gbc_encodingComboBox);
//文件的编码,window里面一般是GBK,linux中一般是UTF-8
encodingComboBox.addItem(SystemHWUtil.EMPTY);
encodingComboBox.addItem(SystemHWUtil.CHARSET_UTF);
encodingComboBox.addItem(SystemHWUtil.CHARSET_GBK);
encodingComboBox.addItem(SystemHWUtil.CHARSET_GB2312);
encodingComboBox.addItem(SystemHWUtil.CHARSET_ISO88591);
//设置默认选中的项
encodingComboBox.setSelectedIndex(0);
JPanel panel = new JPanel();
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.insets = new Insets(0, 0, 5, 0);
gbc_panel.gridwidth = 3;
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 0;
gbc_panel.gridy = 2;
contentPane.add(panel, gbc_panel);
JButton generateMDbutton = new JButton("生成");
generateMDbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String inputText=sourceTxt.getText();
String charset=getSelectedItem4ComboBox(encodingComboBox);
if(ValueWidget.isNullOrEmpty(charset)){
charset=SystemHWUtil.CURR_ENCODING;
}
try {
String md5 = SystemHWUtil.getMD5(inputText,charset);
resultTextArea.setText(md5);
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
});
panel.add(generateMDbutton);
resultTextArea = new AssistPopupTextArea();
JButton btnCopy = ComponentUtil.getCopyBtn(resultTextArea);
panel.add(btnCopy);
JScrollPane scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.gridwidth = 3;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 0;
gbc_scrollPane.gridy = 3;
contentPane.add(scrollPane, gbc_scrollPane);
//结果文本域
resultTextArea.setLineWrap(true);
resultTextArea.setWrapStyleWord(true);
resultTextArea.setEditable(false);
scrollPane.setViewportView(resultTextArea);
}
}
调用:
if (command.equals(MenuUtil2.ACTION_CREATE_MD5)) {
GenerateMD5Dialog generateMD5Dialog=new GenerateMD5Dialog(true/*是否是模态*/);
generateMD5Dialog.setVisible(true);
}
(9)弹出选择文件对话框
private void chooseDestFile(JTextArea ta,String picFormat){
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
File selectedFile=new File("C:\\Users\\Administrator\\Pictures\\"+TimeHWUtil.formatDate(new Date(), "yyyyMM"));
//home目录应该动态获取
if(!ValueWidget.isNullOrEmpty(selectedFile)){
chooser.setSelectedFile(selectedFile);
}
chooser.setName("二维码."+picFormat);
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"picture Files", picFormat, "二维码");
chooser.setFileFilter(filter);
chooser.setDialogType(JFileChooser.SAVE_DIALOG);
chooser.setControlButtonsAreShown(true);
chooser.setDialogTitle("保存二维码");
// chooser.setVisible(true);
int result = chooser.showSaveDialog(ta);
System.out.println("New file:" + result);
if (result == JOptionPane.OK_OPTION)
{
selectedFile = chooser.getSelectedFile();
if(! SystemHWUtil.isHasSuffix(selectedFile)){
selectedFile=new File(selectedFile.getAbsolutePath()+ SystemHWUtil.ENGLISH_PERIOD+picFormat);
}
ImageHWUtil.genericImage(ta, selectedFile, picFormat);
System.out.println("select file:" + selectedFile);
}
}
(10)在表格上增加菜单
private MouseInputListener getMouseInputListener(final JTable jTable) {
return new MouseInputListener() {
public void mouseClicked(MouseEvent e) {
processEvent(e);
}
/***
* //in order to trigger Left-click the event
*/
public void mousePressed(MouseEvent e) {
processEvent(e);// is necessary!!!
}
public void mouseReleased(MouseEvent e) {
// processEvent(e);
if (e.getButton() == MouseEvent.BUTTON3) {// right click
JPopupMenu popupmenu = new JPopupMenu();
JMenuItem runM = new JMenuItem(ACTION_COMMAND_RUN);
JMenuItem copyParameterM = new JMenuItem(ACTION_COMMAND_COPY_REQUEST_PARAMETER);
JMenuItem copyResponseM = new JMenuItem(ACTION_COMMAND_COPY_RESPONSE);
JMenuItem cleanResultM = new JMenuItem("清空结果");
// JMenuItem editM=new JMenuItem("edit");
MyMenuActionListener yMenuActionListener = new MyMenuActionListener();
runM.addActionListener(yMenuActionListener);
copyParameterM.addActionListener(yMenuActionListener);
copyResponseM.addActionListener(yMenuActionListener);
cleanResultM.addActionListener(yMenuActionListener);
popupmenu.add(runM);
popupmenu.add(copyParameterM);
popupmenu.add(copyResponseM);
popupmenu.add(cleanResultM);
popupmenu.show(e.getComponent(), e.getX(), e.getY());
}
}
public void mouseEntered(MouseEvent e) {
processEvent(e);
}
public void mouseExited(MouseEvent e) {
processEvent(e);
}
public void mouseDragged(MouseEvent e) {
processEvent(e);
}
public void mouseMoved(MouseEvent e) {
processEvent(e);
}
private void processEvent(MouseEvent e) {
// Right-click on
if ((e.getModifiers() & MouseEvent.BUTTON3_MASK) != 0) {
// System.out.println(e.getModifiers());
// System.out.println("Right-click on");
int modifiers = e.getModifiers();
modifiers -= MouseEvent.BUTTON3_MASK;
modifiers |= MouseEvent.BUTTON1_MASK;
MouseEvent ne = new MouseEvent(e.getComponent(), e.getID(),
e.getWhen(), modifiers, e.getX(), e.getY(),
e.getClickCount(), false);
jTable.dispatchEvent(ne);// in order to trigger Left-click
// the event
}
}
};
}
调用:
private void rendTable(){
parameterTable_1.getColumnModel().getColumn(2)
.setCellEditor(new MyButtonEditor());
parameterTable_1.getColumnModel().getColumn(2)
.setCellRenderer(new MyButtonRender());
final MouseInputListener mouseInputListener = getMouseInputListener(parameterTable_1);//
parameterTable_1.addMouseListener(mouseInputListener);
}
参考:
http://hw1287789687.iteye.com/blog/2230780
http://hw1287789687.iteye.com/blog/2227989
http://hw1287789687.iteye.com/blog/2173977
http://hw1287789687.iteye.com/blog/2003105