JAVA SWING 初学
一、布局管理器 GridBagLayout
GridBagLayout布局管理器是一个功能十分强大的管理器;它的基本思路是划分单元格
每一个单元格都有各自的属性,而这些属性由GridBagConstrainsts类的成员变量来定义,
且GridBagConstriaints中的所有成员变量都是public的。
jpl.setLayout(new GridBagLayout()); NEW布局管理器
GridBagConstraints c = new GridBagConstraints(); NEW单元格属性类
GridBagConstraints的成员变量:
int gridx 横坐标 当把gridx值设置为GridBagConstriants.RELETIVE时,所添加的组件将被放置在前一个组件的右侧
int gridy 纵坐标 对gridy 值设置为GridBagConstraints.RELETIVE时,所添加的组件将被放置在前一个组件的下方
int gridwidth 横着多长(几个单元格)
int gridheight 高度(几个单元格) 。
double weightx 设置窗口变大时的缩放比例
double weighty 设置窗口变大时的缩放比例
int anchor 设置组件在单元格中的对齐方式(由GridBagConstraints.CENTER等常量表示)
int fill 填充方式,一个组件不能填充单元格时怎么填充
Insets insets Insets(int top,int left,int bottom,int right) 单元格之间的距离
int ipadx 单元格内的组件的最小尺寸
int ipady
setlayut(NULL)之后,组件要使用SETBOUDS函数才可以正常显示。其他设置位置的函数不会显示。
二、混合布局
JPanel getPanel1(){
jp1 = new JPanel();
jp1.setLayout(new FlowLayout());
********
return jp1;
}
JPanel getPanel2(){
jp2 = new JPanel();
jp2.setLayout(new BorderLayout());
********
return jp2;
}
//若外层是一个BorderLayout
this.setLayout(new BorderLayout()); //可以使用GRIDBAG随便混合
this.add(getPanel1(), BorderLayout.NORTH);
this.add(getPanel2(), BorderLayout.SOUTH);
三、TEXTAREA SCROLL 可换行文本框和滑动键
JTextArea jt=new JTextArea(12,10); //参数为文本框大小
JScrollPane scroll = new JScrollPane(jt);//把JT装入可滑动框
jt.setLineWrap(true); //自动换行
scroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //设置滑动键一直出现
只有部分代码。。。供参考
一、布局管理器 GridBagLayout
GridBagLayout布局管理器是一个功能十分强大的管理器;它的基本思路是划分单元格
每一个单元格都有各自的属性,而这些属性由GridBagConstrainsts类的成员变量来定义,
且GridBagConstriaints中的所有成员变量都是public的。
jpl.setLayout(new GridBagLayout()); NEW布局管理器
GridBagConstraints c = new GridBagConstraints(); NEW单元格属性类
GridBagConstraints的成员变量:
int gridx 横坐标 当把gridx值设置为GridBagConstriants.RELETIVE时,所添加的组件将被放置在前一个组件的右侧
int gridy 纵坐标 对gridy 值设置为GridBagConstraints.RELETIVE时,所添加的组件将被放置在前一个组件的下方
int gridwidth 横着多长(几个单元格)
int gridheight 高度(几个单元格) 。
double weightx 设置窗口变大时的缩放比例
double weighty 设置窗口变大时的缩放比例
int anchor 设置组件在单元格中的对齐方式(由GridBagConstraints.CENTER等常量表示)
int fill 填充方式,一个组件不能填充单元格时怎么填充
Insets insets Insets(int top,int left,int bottom,int right) 单元格之间的距离
int ipadx 单元格内的组件的最小尺寸
int ipady
setlayut(NULL)之后,组件要使用SETBOUDS函数才可以正常显示。其他设置位置的函数不会显示。
二、混合布局
JPanel getPanel1(){
jp1 = new JPanel();
jp1.setLayout(new FlowLayout());
********
return jp1;
}
JPanel getPanel2(){
jp2 = new JPanel();
jp2.setLayout(new BorderLayout());
********
return jp2;
}
//若外层是一个BorderLayout
this.setLayout(new BorderLayout()); //可以使用GRIDBAG随便混合
this.add(getPanel1(), BorderLayout.NORTH);
this.add(getPanel2(), BorderLayout.SOUTH);
三、TEXTAREA SCROLL 可换行文本框和滑动键
JTextArea jt=new JTextArea(12,10); //参数为文本框大小
JScrollPane scroll = new JScrollPane(jt);//把JT装入可滑动框
jt.setLineWrap(true); //自动换行
scroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //设置滑动键一直出现
jpl.add(scroll, c); //只用显示滑动框就可以显示文本框,如果你添加了JT的话,显示很有趣的
四、带界面的文件管理系统
package filemaneger;
import java.awt.Color;
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.File;
/*import java.awt.event.ActionEvent;
import java.io.File;*/
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/*import javax.swing.plaf.basic.BasicButtonListener;*/
/*import javax.swing.JTextArea; */
public class maingui extends JFrame/* implements ActionListener*/ {
private static final long serialVersionUID = 1L;
public static String s1;
public static String s2;
public static String s3;
private JButton
b1=new JButton("显示文件"),
b2=new JButton("创建文件夹"),
b3=new JButton("删除文件(夹)"),
b4=new JButton("复制文件(夹)"),
b5=new JButton("文件加密"),
b6=new JButton("文件解密"),
b7=new JButton("压缩文件(夹)"),
b8=new JButton("解压文件"),
b9=new JButton("原始目录"),
b10=new JButton("目标目录");
private gui2 g2=new gui2();
//文本框
public static JTextArea jt=new JTextArea(12,10);
public static JTextField jtf1 = new JTextField();
public static JTextField jtf2 = new JTextField();
class ButtonListener7 implements ActionListener{
public void actionPerformed(ActionEvent e) {
g2.setVisible(true);
}
}
public maingui(){
g2.setVisible(false);
setTitle("made by Pantheon PY");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,500);
this.getContentPane().add(getPanel());//界面布局函数代码
//监听器
final ButtonListener1 blis_1=new ButtonListener1();
b1.addActionListener(blis_1);
final ButtonListener2 blis_2=new ButtonListener2();
b2.addActionListener(blis_2);
final ButtonListener3 blis_3=new ButtonListener3();
b3.addActionListener(blis_3);
final ButtonListener4 blis_4=new ButtonListener4();
b4.addActionListener(blis_4);
final ButtonListener5 blis_5=new ButtonListener5();
b5.addActionListener(blis_5);
final ButtonListener6 blis_6=new ButtonListener6();
b6.addActionListener(blis_6);
final ButtonListener7 blis_7=new ButtonListener7();
b7.addActionListener(blis_7);
final ButtonListener8 blis_8=new ButtonListener8();
b8.addActionListener(blis_8);
final yuanlistener blis_9=new yuanlistener();
b9.addActionListener(blis_9);
final mdlistener blis_10=new mdlistener();
b10.addActionListener(blis_10);
}
//布局代码
private JPanel getPanel(){
JPanel jpl=new JPanel();
jpl.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets=new Insets(2,2,2,2);
c.gridwidth = 1;
c.gridx = 0;
c.gridy = 0;
jpl.add(b1,c);
c.gridx = 1;
c.gridy = 0;
jpl.add(b2, c);
c.gridx = 2;
c.gridy = 0;
jpl.add(b3, c);
c.gridx = 3;
c.gridy = 0;
jpl.add(b4, c);
c.gridx = 0;
c.gridy = 1;
jpl.add(b5, c);
c.gridx = 1;
c.gridy = 1;
jpl.add(b6, c);
c.gridx = 2;
c.gridy = 1;
jpl.add(b7, c);
c.gridx = 3;
c.gridy = 1;
jpl.add(b8, c);
c.insets=new Insets(30,2,2,2);
c.gridx =0;
c.gridy =2;
jpl.add(b9, c);
c.gridx =1;
c.gridy =2;
c.gridwidth=3;
jpl.add(jtf1,c);
c.insets=new Insets(2,2,2,2);
c.gridx =0;
c.gridy =3;
c.gridwidth=1;
jpl.add(b10, c);
c.gridx =1;
c.gridy =3;
c.gridwidth=3;
jpl.add(jtf2,c);
c.gridx = 1;
c.gridy = 4;
c.gridwidth = 2;
c.gridheight=5;
JScrollPane scroll = new JScrollPane(jt);
jt.setLineWrap(true);//自动换行
scroll.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //设置滑动键
jpl.add(scroll, c);
jpl.setBackground(Color.WHITE);
return jpl;
}
//遍历显示文件名代码
public static void showfile(File file)
{
if(file.isDirectory()){
/*System.out.println("文件夹:"+file.getAbsolutePath());*/
jt.append("文件夹:"+file.getAbsolutePath()+"\n");
File[] files = file.listFiles();// 获得传入路径下的所有文件
for (int i = 0; i < files.length; i++) {//
{
showfile(new File(files[i].getAbsolutePath()));
//jt.append("文件:"+files[i].getAbsolutePath()+"\n");
}
}
} else if(file.isFile()){
jt.append("文件:"+file.getAbsolutePath()+"\n");
}
}
public static void main(String[] args)
{
maingui frame=new maingui();
frame.setVisible(true);
}
}
package filemaneger;
import java.io.File;
public class CCRDFile {
// 验证字符串是否为正确路径名的正则表达式
private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";
boolean flag = false;
File file;
public boolean DeleteFolder(String deletePath) {// 根据路径删除指定的目录或文件,无论存在与否
flag = false;
if (deletePath.matches(matches)) {
file = new File(deletePath);
if (!file.exists()) {// 判断目录或文件是否存在
return flag; // 不存在返回 false
} else {
if (file.isFile()) {// 判断是否为文件
return deleteFile(deletePath);// 为文件时调用删除文件方法
} else {
return deleteDirectory(deletePath);// 为目录时调用删除目录方法
}
}
} else {
maingui.jt.append("要传入正确路径!");
return false;
}
}
public boolean deleteFile(String filePath) {// 删除单个文件
flag = false;
file = new File(filePath);
if (file.isFile() && file.exists()) {// 路径为文件且不为空则进行删除
maingui.jt.append("文件"+file.getName() + " 删除成功\n");
file.delete();// 文件删除
flag = true;
}
return flag;
}
public boolean deleteDirectory(String dirPath) {// 删除目录(文件夹)以及目录下的文件
// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
if (!dirPath.endsWith(File.separator)) {
dirPath = dirPath + File.separator;
}
File dirFile = new File(dirPath);
// 如果dir对应的文件不存在,或者不是一个目录,则退出
if (!dirFile.exists() || !dirFile.isDirectory()) {
return false;
}
flag = true;
File[] files = dirFile.listFiles();// 获得传入路径下的所有文件
for (int i = 0; i < files.length; i++) {// 循环遍历删除文件夹下的所有文件(包括子目录)
if (files[i].isFile()) {// 删除子文件
flag = deleteFile(files[i].getAbsolutePath());
maingui.jt.append("文件"+files[i].getAbsolutePath() + " 删除成功\n");
if (!flag)
break;// 如果删除失败,则跳出
} else {// 运用递归,删除子目录
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag)
break;// 如果删除失败,则跳出
}
}
if (!flag)
return false;
if (dirFile.delete()) {// 删除当前目录
return true;
} else {
return false;
}
}
public static void delete(String dir)
{
CCRDFile DR=new CCRDFile();
DR.DeleteFolder(dir);
}
}
package filemaneger;
import java.io.File;
public class CCRDFile {
// 验证字符串是否为正确路径名的正则表达式
private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";
boolean flag = false;
File file;
public boolean DeleteFolder(String deletePath) {// 根据路径删除指定的目录或文件,无论存在与否
flag = false;
if (deletePath.matches(matches)) {
file = new File(deletePath);
if (!file.exists()) {// 判断目录或文件是否存在
return flag; // 不存在返回 false
} else {
if (file.isFile()) {// 判断是否为文件
return deleteFile(deletePath);// 为文件时调用删除文件方法
} else {
return deleteDirectory(deletePath);// 为目录时调用删除目录方法
}
}
} else {
maingui.jt.append("要传入正确路径!");
return false;
}
}
public boolean deleteFile(String filePath) {// 删除单个文件
flag = false;
file = new File(filePath);
if (file.isFile() && file.exists()) {// 路径为文件且不为空则进行删除
maingui.jt.append("文件"+file.getName() + " 删除成功\n");
file.delete();// 文件删除
flag = true;
}
return flag;
}
public boolean deleteDirectory(String dirPath) {// 删除目录(文件夹)以及目录下的文件
// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
if (!dirPath.endsWith(File.separator)) {
dirPath = dirPath + File.separator;
}
File dirFile = new File(dirPath);
// 如果dir对应的文件不存在,或者不是一个目录,则退出
if (!dirFile.exists() || !dirFile.isDirectory()) {
return false;
}
flag = true;
File[] files = dirFile.listFiles();// 获得传入路径下的所有文件
for (int i = 0; i < files.length; i++) {// 循环遍历删除文件夹下的所有文件(包括子目录)
if (files[i].isFile()) {// 删除子文件
flag = deleteFile(files[i].getAbsolutePath());
maingui.jt.append("文件"+files[i].getAbsolutePath() + " 删除成功\n");
if (!flag)
break;// 如果删除失败,则跳出
} else {// 运用递归,删除子目录
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag)
break;// 如果删除失败,则跳出
}
}
if (!flag)
return false;
if (dirFile.delete()) {// 删除当前目录
return true;
} else {
return false;
}
}
public static void delete(String dir)
{
CCRDFile DR=new CCRDFile();
DR.DeleteFolder(dir);
}
}
package filemaneger;
import java.io.*;//引入类
public class copyFile {
public static void copyFiles(String oldPath,String newPath){
try {
File a=new File(oldPath);
if(a.isFile())
{
FileInputStream input = new FileInputStream(a);
FileOutputStream output = new FileOutputStream(newPath +"\\"+
(a.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ( (len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
maingui.jt.append(a.getName().toString()+"复制完成\n");
}
else
{
newPath=newPath+"\\"+a.getName().toString();
File file2=new File(newPath);
if(!file2.exists()){
file2.mkdirs();
}
System.out.println(newPath);
String[] file=a.list();
for (int i = 0; i < file.length; i++) {
copyFiles(oldPath+"\\"+file[i],newPath+"\\");
}
}
}
catch (Exception e) {
maingui.jt.append("复制整个文件夹内容操作出错");
e.printStackTrace();
}
}
public static void copy(String str1,String str2){
copyFiles(str1,str2);
}
}
package filemaneger;
import java.io.*;
import java.util.zip.*;
/**
* 程序实现了ZIP压缩。共分为2部分 :
* 压缩(compression)与解压(decompression)
* <p>
* 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
* 需在代码中自定义源输入路径和目标输出路径。
* <p>
* 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。
* @author HAN
*
*/
public class CopyOfMyzipDecompressing {
public static void dzip(String str,String str2) {
// TODO Auto-generated method stub
long startTime=System.currentTimeMillis();
try {
ZipInputStream Zin=new ZipInputStream(new FileInputStream(str));//输入源zip路径
BufferedInputStream Bin=new BufferedInputStream(Zin);
String Parent=str2; //输出路径(文件夹目录)
File Fout=null;
ZipEntry entry;
try {
while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){
Fout=new File(Parent,entry.getName());
if(!Fout.exists()){
(new File(Fout.getParent())).mkdirs();
}
FileOutputStream out=new FileOutputStream(Fout);
BufferedOutputStream Bout=new BufferedOutputStream(out);
int b;
while((b=Bin.read())!=-1){
Bout.write(b);
}
Bout.close();
out.close();
//System.out.println(Fout+"解压成功");
maingui.jt.append(Fout+"解压成功");
}
Bin.close();
Zin.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime=System.currentTimeMillis();
//System.out.println("耗费时间: "+(endTime-startTime)+" ms");
maingui.jt.append("耗费时间: "+(endTime-startTime)+" ms");
}
}
package filemaneger;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import filemaneger.maingui;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.filechooser.FileNameExtensionFilter;
public class jiantingqi {
public String str;
public jiantingqi() {
str=new String("null");
}
}
class ButtonListener1 implements ActionListener{
public void actionPerformed(ActionEvent e) {
JFileChooser jfc=new JFileChooser();
File temp=new File("D:\\");
jfc.setCurrentDirectory(temp);
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.setDialogTitle("显示(创建)文件和目录");
int returnVal= jfc.showDialog(new JLabel(), "选择");
File file=jfc.getSelectedFile();
if(returnVal==JFileChooser.APPROVE_OPTION)
{
maingui.jt.setText("");
maingui.showfile(file);
}
}
}
class ButtonListener2 implements ActionListener{
public void actionPerformed(ActionEvent e) {
JFileChooser jfc=new JFileChooser();
File temp=new File("D:\\");
jfc.setCurrentDirectory(temp);
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.setDialogTitle("创建文件夹");
jfc.showDialog(new JLabel(), "确认");
maingui.jt.setText("");
}
}
class ButtonListener3 implements ActionListener{
public void actionPerformed(ActionEvent e) {
JFileChooser jfc=new JFileChooser();
File temp=new File("D:\\");
jfc.setCurrentDirectory(temp);
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.setDialogTitle("删除文件或者文件夹");
int returnVal= jfc.showDialog(new JLabel(), "确认");
maingui.jt.setText("");
if(returnVal==JFileChooser.APPROVE_OPTION)
{
File file=jfc.getSelectedFile();
CCRDFile.delete(file.toString());
// maingui.jt.append("删除成功");
}
}
}
class ButtonListener4 implements ActionListener{
public void actionPerformed(ActionEvent e) {
maingui.jt.setText("");
// maingui.jt.append("复制文件功能\n");
maingui.s1=maingui.jtf1.getText();
maingui.s2=maingui.jtf2.getText();
copyFile.copy(maingui.s1, maingui.s2);
maingui.jtf1.setText("");
maingui.jtf2.setText("");
}
}
class ButtonListener6 implements ActionListener{
public void actionPerformed(ActionEvent e) {
maingui.jt.setText("");
// maingui.jt.append("解密功能\n");
maingui.s1=maingui.jtf1.getText();
maingui.s2=maingui.jtf2.getText();
jiemi.jie(maingui.s1, maingui.s2+"\\解密后文件夹");
maingui.jtf1.setText("");
maingui.jtf2.setText("");
}
}
class ButtonListener5 implements ActionListener{
public void actionPerformed(ActionEvent e) {
maingui.jt.setText("");
// maingui.jt.append("加密文件功能\n");
maingui.s1=maingui.jtf1.getText();
maingui.s2=maingui.jtf2.getText();
jiami.jm(maingui.s1, maingui.s2);
maingui.jtf1.setText("");
maingui.jtf2.setText("");
}
}
class ButtonListener8 implements ActionListener{
public void actionPerformed(ActionEvent e) {
// maingui.jt.append("解压文件功能\n");
maingui.s1=maingui.jtf1.getText();
maingui.s2=maingui.jtf2.getText();
CopyOfMyzipDecompressing.dzip(maingui.s1,maingui.s2);
maingui.jtf1.setText("");
maingui.jtf2.setText("");
}
}
class yuanlistener implements ActionListener{
public void actionPerformed(ActionEvent e) {
JFileChooser jfc=new JFileChooser();
File temp=new File("D:\\");
jfc.setCurrentDirectory(temp);
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.setDialogTitle("选择原目录");
int re= jfc.showDialog(new JLabel(), "选择");
File file=jfc.getSelectedFile();
if(re==JFileChooser.APPROVE_OPTION)
{
maingui.s1=file.getAbsolutePath();
maingui.jtf1.setText(maingui.s1);
}
}
}
class mdlistener implements ActionListener{
public void actionPerformed(ActionEvent e) {
JFileChooser jfc=new JFileChooser();
File temp=new File("D:\\");
jfc.setCurrentDirectory(temp);
FileNameExtensionFilter filter = new FileNameExtensionFilter(
".zip","zip");//文件名过滤器
jfc.setFileFilter(filter);//给文件选择器加入文件过滤器
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.setDialogTitle("选择原目录");
int re=jfc.showDialog(new JLabel(), "选择");
File file=jfc.getSelectedFile();
if(re==JFileChooser.APPROVE_OPTION)
{
maingui.s2=file.getAbsolutePath();
maingui.jtf2.setText(maingui.s2);
}
}
}
package filemaneger;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class gui2 extends JFrame{
/**
*
*/
public String guistr;
private static final long serialVersionUID = 1L;
public JTextField name=new JTextField();
private JLabel lable=new JLabel("为压缩文件命名");
private JButton b11=new JButton("确认");
class OKlistener implements ActionListener{
public void actionPerformed(ActionEvent e) {
maingui.s3=name.getText();
maingui.jt.append(maingui.s3);
setVisible(false);
maingui.s1=maingui.jtf1.getText();
maingui.s2=maingui.jtf2.getText();
MyZipCompressing.zips(maingui.s1, maingui.s2,maingui.s3);
maingui.jtf1.setText("");
maingui.jtf2.setText("");
}
}
public gui2() {
// TODO Auto-generated constructor stub
setTitle("gui2");
setSize(300,200);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setLayout(null);
add(b11);
b11.setBounds (100, 100,80,40);
add(name);
name.setBounds(40,50,200,30);
add(lable);
lable.setBounds(40,20,200,30);
final OKlistener boklis=new OKlistener();
b11.addActionListener(boklis);
}
public static void main(String[] args)
{
gui2 g2=new gui2();
g2.setVisible(true);
}
}
只有部分代码。。。供参考