`

java swing 把控件转化为BufferedImage

阅读更多

java swing 把控件映射为BufferedImage

如何把java swing的可视控件 转化为BufferedImage 呢?

直接上代码:

/***
	     * convert JTextArea to image
	     * @param ta
	     * @param destFile
	     * @param format
	     */
	    public static BufferedImage genericImage(JComponent ta,File destFile,String format){//TODO 如何提高分辨率
			BufferedImage img = new BufferedImage(ta.getWidth(), ta.getHeight(), BufferedImage.TYPE_INT_RGB);
	        Graphics2D g2d = img.createGraphics();
	        ta.printAll(g2d);
	        g2d.dispose();
	        if(!ValueWidget.isNullOrEmpty(destFile)){
	        	try {
		            ImageIO.write(img, format/*"jpg"*/, destFile);
		        } catch (IOException ex) {
		            ex.printStackTrace();
		        }
	        }
	        
	        return img;
		}

 

如何把BufferedImage 复制到剪切板:

/***
	 * 复制图片到剪切板
	 * @param image
	 */
	public static void setClipboardImage(Container frame, final Image image) {
		Transferable trans = new Transferable() {
			@Override
			public Object getTransferData(DataFlavor flavor)
					throws UnsupportedFlavorException, IOException {
				if (isDataFlavorSupported(flavor)) {
					return image;
				}
				throw new UnsupportedFlavorException(flavor);
			}

			@Override
			public DataFlavor[] getTransferDataFlavors() {
				return new DataFlavor[] { DataFlavor.imageFlavor };
			}

			@Override
			public boolean isDataFlavorSupported(DataFlavor flavor) {
				return DataFlavor.imageFlavor.equals(flavor);
			}
		};
		
		frame.getToolkit().getSystemClipboard().setContents(trans, null);
	}

 

 

 

调用:

BufferedImage img =ImageHWUtil.genericImage(ta, null, "jpg"/*picFormat*/);
					if(ValueWidget.isNullOrEmpty(img)){
						return;
					}
					ComponentUtil.setClipboardImage(ta.getParent(),img);
					ToastMessage toastMessage = new ToastMessage("复制图片到剪切板",3000);
		            toastMessage.setVisible(true);

 

下面是详细工具类:

package com.swing.component;

import java.awt.Color;
import java.awt.Container;
import java.awt.Frame;
import java.awt.Image;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JProgressBar;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;

import com.common.dict.Constant2;
import com.common.util.SystemHWUtil;
import com.common.util.TypeUtil;
import com.common.util.WindowUtil;
import com.io.hw.file.util.FileUtils;
import com.string.widget.util.ValueWidget;
import com.swing.menu.MenuUtil2;
import com.swing.messagebox.GUIUtil23;
import com.time.util.TimeHWUtil;

public final class ComponentUtil {
	/***
	 * 为了防止JTextField 重复增加 DocumentListener
	 */
	public static List<JTextField> tfs = new ArrayList<JTextField>();

	/***
	 * 获取指定页面 复选框被选中的个数
	 * 
	 * @param checkBoxes
	 * @param startIndex
	 *            :currentPage * size_per_page
	 * @param count
	 * @return
	 */
	public static int getSelSum(List checkBoxes, int startIndex, int count) {
		if (checkBoxes == null || checkBoxes.size() == 0) {
			return 0;
		} else {
			JCheckBox[] chkArr = getCurrentPageChkbox(checkBoxes, startIndex,
					count);
			if (chkArr == null) {
				return 0;
			}
			int tmp = 0;
			for (int i = 0; i < chkArr.length; i++) {
				JCheckBox array_element = chkArr[i];
				tmp += TypeUtil.bool2int(array_element.isSelected());
			}
			return tmp;
		}
	}

	/***
	 * 
	 * @param checkBoxes
	 * @param startIndex
	 *            :0,5,10,15 ;if =-1,indicate no paging
	 * @param count
	 *            :size of per page
	 */
	public static void setSelect(List checkBoxes, int startIndex, int count) {
		JCheckBox[] chkArr = getCurrentPageChkbox(checkBoxes, startIndex, count);
		if (ValueWidget.isNullOrEmpty(chkArr)) {
			return;
		}
		for (int i = 0; i < chkArr.length; i++) {
			JCheckBox chk = chkArr[i];
			chk.setSelected(true);
//			System.out.println(2);
		}
	}

	/***
	 * 
	 * @param checkBoxes
	 * @param startIndex
	 *            :0,5,10,15 ;if =-1,indicate no paging and omit count
	 * @param count
	 *            :omit when startIndex=-1
	 * @return
	 */
	public static JCheckBox[] getCurrentPageChkbox(List checkBoxes,
			int startIndex, int count) {
		if (checkBoxes == null || checkBoxes.size() == 0) {
			return null;
		} else {
			int endIndex = startIndex + count;
			int sum_chk = checkBoxes.size();
			if (/*startIndex == -1*/startIndex <0) {
				startIndex = 0;
			} else {
				if (sum_chk < endIndex) {
					endIndex = sum_chk;
				}
			}
			JCheckBox[] chkArr = new JCheckBox[endIndex - startIndex];
			int index3 = 0;
			for (int i = startIndex; i < endIndex&i<sum_chk; i++) {
				JCheckBox chk = (JCheckBox) checkBoxes.get(i);
				chkArr[index3] = chk;
				index3++;
			}
			return chkArr;
		}
	}

	public static int getCurrentPageChkboxSum(List checkBoxes, int startIndex,
			int count) {
		if (checkBoxes == null || checkBoxes.size() == 0) {
			return 0;
		} else {
			JCheckBox[] chkArr = getCurrentPageChkbox(checkBoxes, startIndex,
					count);
			return chkArr.length;
		}
	}

	/***
	 * 当文本框中输入\ 时,自动扫描该目录下是否只有一个文件,若只有一个文件,设置文本框的值为该文件的绝对路径
	 * 
	 * @param sourceTF
	 * @param e
	 * @throws BadLocationException
	 */
	public static void assistantTF(final JTextField sourceTF, DocumentEvent e)
			throws BadLocationException {
		int changeLength = e.getLength();
		if (changeLength == 1) {// 表示一次性增加的字符个数是1
			final Document doc = e.getDocument();
			final String input = doc.getText(e.getDocument().getLength() - 1,
					changeLength);
			String filepath = null;
			File[] files = null;
			final String sourceFileStr = sourceTF.getText();
			if (input.endsWith(SystemHWUtil.SEPARATOR)) {// 输入的必须是一个字符,必须是\
				files = FileUtils.getFilesByPathAndSuffix(sourceFileStr, "");

			} else {

				String fatherFolder = SystemHWUtil.getParentDir(sourceFileStr);
				if (!ValueWidget.isNullOrEmpty(fatherFolder)) {
					files = FileUtils.getFilesByPathAndPrefix(fatherFolder,
							SystemHWUtil.getFileSimpleName(sourceFileStr));
				}

			}
			if (!ValueWidget.isNullOrEmpty(files)) {
				if (files.length == 1) {
					filepath = files[0].getAbsolutePath();
					// System.out.println(filepath);
				}
			}
			if (!ValueWidget.isNullOrEmpty(filepath)) {
				// System.out.println("input:" + filepath);
				// 临时变量
				final String filepath_tmp = filepath;
				new Thread(new Runnable() {
					@Override
					public void run() {
						// int length2=sourceFileStr.length();
						// try {
						// doc.insertString(length2-1, "abc", null);
						// } catch (BadLocationException e4) {
						// e4.printStackTrace();
						// }
						sourceTF.setText(filepath_tmp);// 应该放在线程中,不然会报异常:java.lang.IllegalStateException:
														// Attempt to mutate in
														// notification,参考:http://stackoverflow.com/questions/2788779/java-lang-illegalstateexception-while-using-document-listener-in-textarea-java
						sourceTF.setCaretPosition(filepath_tmp.length());
						// sourceTF.updateUI();
					}
				}).start();
			}
		}
	}

	public static void assistantTF(final JTextField sourceTF) {
		boolean isContains = tfs.contains(sourceTF);
		if (isContains) {
			throw new RuntimeException(
					"This JTextField has added the DocumentListener.");
		}
		final Document doc = sourceTF.getDocument();
		DocumentListener docLis = new DocumentListener() {

			@Override
			public void removeUpdate(DocumentEvent e) {

			}

			@Override
			public void insertUpdate(DocumentEvent e) {
				// System.out.println("insert");
				try {
					ComponentUtil.assistantTF(sourceTF, e);// Assist path
															// complement
				} catch (BadLocationException e2) {
					e2.printStackTrace();
				}

			}

			@Override
			public void changedUpdate(DocumentEvent e) {
				// System.out.println("change");
			}
		};
		doc.addDocumentListener(docLis);
		tfs.add(sourceTF);
	}

	/***
	 * Get a copy button.
	 * 
	 * @param tp
	 * @return
	 */
	public static JButton getCopyBtn(final JTextPane tp) {
		JButton copyBtn = new JButton(MenuUtil2.ACTION_STR_COPY);
		copyBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if(!ValueWidget.isNullOrEmpty(tp)){
				String input = tp.getText();
				if (!ValueWidget.isNullOrEmpty(input)) {
					WindowUtil.setSysClipboardText(input);
				}
			}}
		});
		return copyBtn;
	}

	/***
	 * Get a copy button.
	 * 
	 * @param tf
	 * @return
	 *//*
	public static JButton getCopyBtn(final JTextField tf) {
		JButton copyBtn = new JButton(MenuUtil2.ACTION_STR_COPY);
		copyBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if(!ValueWidget.isNullOrEmpty(tf)){
				String input = tf.getText();
				if (!ValueWidget.isNullOrEmpty(input)) {
					WindowUtil.setSysClipboardText(input);
				}
			}}
		});
		return copyBtn;
	}*/

	/***
	 * 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)){
					String input = ta.getText();
					if (!ValueWidget.isNullOrEmpty(input)) {
						WindowUtil.setSysClipboardText(input);
					}
				}
			}
		});
		return copyBtn;
	}

	/***
	 * 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;
	}

	/***
	 * Get a paste button.
	 * 
	 * @param tf
	 * @return
	 */
	/*public static JButton getPasteBtn(final JTextField tf) {
		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)) {
					tf.setText(input);
				}
			}
		});
		return copyBtn;
	}*/

	/***
	 * Get a paste button.
	 * 
	 * @param tp
	 * @return
	 */
	public static JButton getPasteBtn(final JTextPane tp) {
		if(ValueWidget.isNullOrEmpty(tp)){
			return null;
		}
		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)) {
					tp.setText(input);
				}
			}
		});
		return copyBtn;
	}
	/***
	 * 默认显示时间
	 * @param resultTextArea
	 * @param result
	 * @param isAddDivide
	 */
	public static void appendResult(JTextArea resultTextArea, String result,
			boolean isAddDivide){
		appendResult(resultTextArea, result, isAddDivide, true);
	}
	/***
	 * 
	 * @param resultTextArea
	 * @param result
	 * @param isAddDivide
	 * @param prependTime : 是否显示时间
	 */
	public static void appendResult(JTextArea resultTextArea, String result,
			boolean isAddDivide,boolean prependTime) 
	{
		if(ValueWidget.isNullOrEmpty(resultTextArea)){
			return;
		}
		appendResult(resultTextArea, result, isAddDivide, false,prependTime);
	}
	/***
	 * 向结果文本框追加内容,不会删除原来的内容。
	 * 
	 * @param result
	 * @param CRLFbefore : 表示是否在前面添加一个回车换行
	 * @param isAddDivide
	 * @param prependTime : 是否显示时间
	 */
	public static void appendResult(JTextArea resultTextArea, String result,
			boolean isAddDivide,boolean CRLFbefore,boolean prependTime) {
		if(ValueWidget.isNullOrEmpty(resultTextArea)){
			return;
		}
		if (result == null) {
			result = "";
		} else {
			result = result + SystemHWUtil.CRLF;
			if(prependTime){
				String currentTime=TimeHWUtil.getCurrentMiniuteSecondZH();
				result = currentTime+"\t|  "+result;
			}
		}
		if(CRLFbefore){
			result=SystemHWUtil.CRLF+result;
		}
		Document doc = resultTextArea.getDocument();
		int length = doc.getLength();
		try {
			doc.insertString(length, result, null);
			length = length + result.length();
			if (isAddDivide) {
				doc.insertString(length, SystemHWUtil.DIVIDING_LINE
						+ SystemHWUtil.CRLF, null);
			}
		} catch (BadLocationException e) {
			e.printStackTrace();
			GUIUtil23.warningDialog(e.getMessage());
		}

	}
	/***
	 * 向结果文本框追加内容,不会删除原来的内容。
	 * 
	 * @param result
	 * @param isAddDivide
	 */
	public static void appendResult(JTextPane resultTextArea, String result,
			boolean isAddDivide) {
		if(ValueWidget.isNullOrEmpty(resultTextArea)){
			return;
		}
		appendResult(resultTextArea, result, null, isAddDivide);
	}
	/***
	 * 向结果文本框追加内容,不会删除原来的内容。
	 * 
	 * @param result
	 * @param isAddDivide
	 */
	public static void appendResult(JTextPane resultTextPane, String result, AttributeSet set,
			boolean isAddDivide) {
		if(ValueWidget.isNullOrEmpty(resultTextPane)){
			return;
		}
		if (result == null) {
			result = "";
		} else {
			result = result + SystemHWUtil.CRLF;
		}
		Document doc = resultTextPane.getDocument();resultTextPane.getText();
		int length = doc.getLength();
//		if(length>7){
//			length=length-17;
//		}
		try {
			doc.insertString(length, result, set);
			length = length + result.length();
			if (isAddDivide) {
				doc.insertString(length, SystemHWUtil.DIVIDING_LINE
						+ SystemHWUtil.CRLF, null);
			}
		} catch (BadLocationException e) {
			e.printStackTrace();
			GUIUtil23.warningDialog(e.getMessage());
		}

	}

	/***
	 * 在实际使用过程中,应该放在线程中
	 * 
	 * @param in
	 * @param sourceSize
	 *            : 输入流的长度,即要读取的字节个数
	 * @param targfile
	 */
	public static void progress(JProgressBar copyProgressBar, InputStream in,
			long sourceSize, File targfile) {
		FileOutputStream target = null;
		try {
			int bytesArrLeng = 0;
			if (sourceSize < SystemHWUtil.BUFF_SIZE_1024) {//
				bytesArrLeng = (int) sourceSize;
			} else {
				long shangOne = sourceSize / SystemHWUtil.NUMBER_100;
				if (shangOne == 0) {// sourceSize<100
					shangOne = shangOne + 1;
				}

				if (shangOne <= SystemHWUtil.BUFF_SIZE_1024) {
					bytesArrLeng = (int) shangOne;
				} else {
					long shangTwo = shangOne / SystemHWUtil.BUFF_SIZE_1024;
					if (shangOne % SystemHWUtil.BUFF_SIZE_1024 != 0) {
						shangTwo = shangTwo + 1L;
					}
					bytesArrLeng = (int) (shangOne / shangTwo);
				}
			}
			System.out.println("字节数组的长度是:" + bytesArrLeng);
			target = new FileOutputStream(targfile);
			byte[] buffer = new byte[bytesArrLeng];
			int byteNum;
			long hasReadByte = 0L;// 已经读取的字节个数
			float result;
			int progressSize = 0;
			while ((byteNum = in.read(buffer)) != SystemHWUtil.NEGATIVE_ONE) {
				target.write(buffer, 0, byteNum);
				hasReadByte = hasReadByte + byteNum;
				result = (float) ((double) hasReadByte / sourceSize);
				progressSize = Math.round(result * SystemHWUtil.NUMBER_100);
				updateProgress(copyProgressBar, progressSize);
			}
			if (progressSize < SystemHWUtil.NUMBER_100) {
				progressSize = SystemHWUtil.NUMBER_100;
				updateProgress(copyProgressBar, progressSize);
			}
			copyProgressBar.setForeground(Color.blue);

		} catch (Exception e) {
			e.printStackTrace();
			GUIUtil23.errorDialog(e);
			// copyFileBtn.setEnabled(true);
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
					GUIUtil23.errorDialog(e);
				}
				in = null;
			}
			if (target != null) {
				try {
					target.close();
				} catch (IOException e) {
					e.printStackTrace();
					GUIUtil23.errorDialog(e);
				}
				target = null;
			}
		}
	}

	/***
	 * 更新进度条上得进度数字
	 * 
	 * @param copyProgressBar
	 * @param progressSize
	 */
	private static void updateProgress(JProgressBar copyProgressBar,
			int progressSize) {
		copyProgressBar.setString(progressSize + "%");
		copyProgressBar.setValue(progressSize);
	}
	/***
	 * 复制图片到剪切板
	 * @param image
	 */
	public static void setClipboardImage(Container frame, final Image image) {
		Transferable trans = new Transferable() {
			@Override
			public Object getTransferData(DataFlavor flavor)
					throws UnsupportedFlavorException, IOException {
				if (isDataFlavorSupported(flavor)) {
					return image;
				}
				throw new UnsupportedFlavorException(flavor);
			}

			@Override
			public DataFlavor[] getTransferDataFlavors() {
				return new DataFlavor[] { DataFlavor.imageFlavor };
			}

			@Override
			public boolean isDataFlavorSupported(DataFlavor flavor) {
				return DataFlavor.imageFlavor.equals(flavor);
			}
		};
		
		frame.getToolkit().getSystemClipboard().setContents(trans, null);
	}
	public static BufferedImage getClipboardImage(Frame frame) {
		// java.lang.ClassCastException: sun.awt.datatransfer.TransferableProxy cannot be cast to sun.awt.datatransfer.ClipboardTransferable
		Transferable trans=frame.getToolkit().getSystemClipboard().getContents(null);
		BufferedImage image=null;
//		if(trans instanceof ClipboardTransferable){
//		ClipboardTransferable clipboardTrans =(ClipboardTransferable)trans;
		
		try {
			if (null != trans && trans.isDataFlavorSupported(DataFlavor.imageFlavor)) {   
			Object obj22=trans.getTransferData(DataFlavor.imageFlavor);
			if(!ValueWidget.isNullOrEmpty(obj22)){
				if(obj22 instanceof BufferedImage){
				image=(BufferedImage)obj22;
				}
			}
			}
		} catch (UnsupportedFlavorException e1) {
			e1.printStackTrace();
			GUIUtil23.errorDialog(e1);
		} catch (IOException e1) {
			e1.printStackTrace();
			GUIUtil23.errorDialog(e1);
		}
//		}
		
		
		/*try {
			Map map=(Map)ReflectHWUtils.getObjectValue(clipboardTrans, "flavorsToData");
			Object val=null;
			for(Object obj:map.keySet()){
				val=map.get(obj);
				break;
			}
			byte[] data=(byte[])ReflectHWUtils.getObjectValue(val, "data");
			
			return data;//(BufferedImage)trans.getTransferData(trans.getTransferDataFlavors()[0]);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}*/
		return image;
	}
	/***
	 * 
	 * @param comb
	 * @param urls
	 */
	public static void fillComboBox(JComboBox<String> comb,String urls[]){
		if(comb==null||ValueWidget.isNullOrEmpty(urls)){
			return;
		}
		for(int i=0;i<urls.length;i++){
			comb.addItem(urls[i]);
		}
	}
	/***
	 * 
	 * @param comb : 下拉框
	 * @param picUrls : 以;;分割的字符串
	 */
	public static void fillComboBox(JComboBox<String> comb,String picUrls){
		if(!ValueWidget.isNullOrEmpty(picUrls)){//为空判断
			String urls[]=picUrls.split(Constant2.SHAREDPICDIVISION);
			ComponentUtil.fillComboBox(comb, SystemHWUtil.unique(urls));
		}
	}
	public static JComboBox<String> comboBoxSelectedHandle(JComboBox<String> comboBox,final JTextField ipTextField){
		if(ValueWidget.isNullOrEmpty(comboBox)){
			comboBox = new JComboBox<String>();
		}
		comboBox.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				JComboBox<String> target=(JComboBox<String>)e.getSource();
				String  selectedPort=(String)target.getSelectedItem();
                if(!ValueWidget.isNullOrEmpty(selectedPort)){
                	ipTextField.setText(selectedPort);
                }
//				System.out.println(e.getSource());
			}
		});
		comboBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				JComboBox<String> target=(JComboBox<String>)e.getSource();
				String  selectedPort=(String)target.getSelectedItem();
                if(!ValueWidget.isNullOrEmpty(selectedPort)){
                	ipTextField.setText(selectedPort);
                }
			}
		});
		return comboBox;
	}
	
	/***
	 * 
	 * @param tc
	 */
	public static void trim(JTextComponent tc){
		String text=tc.getText();
		if(text!=null && text.length()>0){
			tc.setText(text.trim());
		}
	}
}

 

 

 

 

 

  • 大小: 59.8 KB
2
2
分享到:
评论
1 楼 comsci 2015-08-10  

   顶..支持...厉害....

相关推荐

    Java Image转BufferedImage

    `Image`和`BufferedImage`是Java AWT(Abstract Window Toolkit)和Swing库中的两个重要类,它们分别用于处理图像的不同方面。本篇文章将详细探讨如何将`Image`对象转换为`BufferedImage`,以及这样做的原因和好处。...

    java Swing读取图片

    在Java编程中,Swing库提供了丰富的组件和功能来创建图形用户界面(GUI)。当我们需要在Swing应用中展示图片时,可以利用特定的方法来读取并显示图像。本篇文章将详细讲解如何在Java Swing中读取和显示图片,以及与...

    java swing opencv调用摄像头实现拍照及本地保存支持上传FTP路径配置

    4. **本地保存照片**:使用Java的`ImageIO`类,可以将`BufferedImage`对象写入磁盘,保存为JPEG或其他图像格式的文件。 5. **FTP上传配置**:要支持上传FTP服务器,你需要一个FTP客户端库,如Apache Commons Net。...

    Java Swing做的图片浏览器

    Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。它提供了丰富的组件和工具,使得开发者可以创建出功能完善的、交互式的用户界面。在这个特定的案例中,"Java Swing做的图片浏览器"是一个利用Java ...

    JavaSwing实现飞机大战

    本项目"JavaSwing实现飞机大战"是一个基于JavaSwing开发的经典游戏,它展示了如何利用JavaSwing组件来创建一个交互式的、具有图形界面的游戏。 在JavaSwing中,我们可以使用组件(如JFrame、JButton、JLabel等)来...

    基于Java Swing远程屏幕监控系统.zip

    通过调用createScreenCapture()方法,我们可以得到屏幕的BufferedImage对象,然后将其编码为适合网络传输的格式,如JPEG或PNG。 接下来,客户端需要将屏幕图像发送到服务器。这通常通过Socket编程实现,使用TCP协议...

    java swing 生成二维条码

    4. 将BitMatrix转换为BufferedImage对象,以便于在Swing组件中显示: ```java BufferedImage image = BitmapEncoder.createBufferedImage(bitMatrix.getWidth(), bitMatrix.getHeight(), BufferedImage.TYPE_INT_...

    java swing截图发送 电子邮件

    在Java编程领域,Swing是用于构建图形用户界面(GUI)的一个重要库,它提供了丰富的组件和工具来创建桌面应用程序。而电子邮件功能则涉及到网络通信和数据交换,通常使用JavaMail API来实现。本篇文章将深入探讨如何...

    Java潜艇游戏 JavaSwing

    在这个项目中,我们看到一个用JavaSwing开发的简易潜艇游戏,这为学习Java GUI编程提供了一个很好的实践机会。 在JavaSwing中,我们可以利用各种组件如JFrame、JPanel、JButton、JLabel等来创建用户界面。在这个...

    基于JavaSwing的游戏 --魔塔(MagicTower)

    本项目利用JavaSwing来开发了一款名为“魔塔”的游戏,这是一款基于策略和决策的小型冒险游戏。本文将深入探讨如何利用JavaSwing来实现这款游戏的关键功能。 1. **JavaSwing基础** JavaSwing提供了许多组件,如...

    Java Swing组件写的游戏客户端.zip

    Java Swing组件写的游戏客户端 Java Swing是Java标准库中的一个图形用户界面(GUI)工具包,用于构建桌面应用程序。在这个特定的项目中,"Java Swing组件写的游戏客户端" 暗示了一个基于Java Swing开发的游戏客户端...

    java swing 毛玻璃实现

    Java Swing 是Java GUI(图形用户界面)库的一部分,它允许开发者创建桌面应用程序。在Java Swing中,我们可以利用组件和布局管理器来构建丰富的用户界面。本教程将专注于一个特定的主题——"毛玻璃效果"(也称为...

    java swing 截屏软件实现

    Java Swing 是Java GUI(图形用户界面)库的一部分,主要用于创建桌面应用程序。在Java Swing中实现截屏功能,可以通过利用Java的Graphics2D类和AWT Robot类来完成。以下是对这个"java swing 截屏软件实现"的详细...

    java swing 画图 直线 圆 四方形 保存图像

    在Java Swing中,我们可以利用Java的图形库来创建和编辑图像。Swing是Java AWT(Abstract Window Toolkit)的一个扩展,提供了丰富的组件和图形功能,使得开发者能够构建出具有复杂图形用户界面的应用程序。本教程将...

    Java-Swing界面的摄像头\\高拍仪抓图功能,有预览视频-使用xuggle。

    Java Swing 是Java GUI编程的一部分,它提供了一套丰富的组件库,用于创建桌面应用程序的用户界面。在Java Swing中实现摄像头或高拍仪的抓图功能,可以极大地增强应用的交互性和实用性。本教程将深入探讨如何利用...

    用JAVA SWING做的qq游戏大家来找茬的辅助程序.zip

    【标题】"用JAVA SWING做的qq游戏大家来找茬的辅助程序"是一个基于Java Swing开发的桌面应用程序,专为QQ游戏“大家来找茬”提供辅助功能。Swing是Java的标准库,用于创建图形用户界面(GUI),在本项目中被用来构建...

    JavaSwing坦克大战

    《JavaSwing坦克大战》是一款基于Java Swing技术开发的经典坦克战斗游戏,它是初学者学习Java编程,特别是GUI(图形用户界面)设计的一个理想实践项目。在这个项目中,开发者可以深入理解Swing组件的使用,以及如何...

    利用Java程序把多张图片合成一张图片

    要实现这个功能,我们需要使用到Java的图像处理库,如Java AWT(Abstract Window Toolkit)和Swing。下面,我们将详细探讨如何使用Java来实现这一功能。 首先,我们需要导入必要的Java库: ```java import java....

    java swing 写的远程协助 超好用

    Java Swing 是Java GUI(图形用户界面)开发的一个重要框架,用于构建桌面应用程序。在这个特定的场景中,"java swing 写的远程协助 超好用" 指的是一款利用Java Swing技术开发的远程协助工具。这个工具可能允许用户...

    基于Java swing的风景日历课程设计

    在这个基于Java Swing的“风景日历课程设计”项目中,开发者利用Swing的特性构建了一个功能丰富的日历应用,结合了图像展示功能,为用户提供了一种独特的方式来管理和欣赏风景图片。 首先,让我们深入了解一下Swing...

Global site tag (gtag.js) - Google Analytics