将指定组件追加到此容器的尾部。
add(Component comp, int index)
将指定组件添加到此容器的给定位置上。
add(Component comp, Object constraints)
将指定的组件添加到此容器的尾部。
add(Component comp, Object constraints, int index)
使用指定约束,将指定组件添加到此容器的指定索引所在的位置上。
1.选择文件路径输出package com.dao
import java.awt.FlowLayout
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JButton
import javax.swing.JFileChooser
import javax.swing.JFrame
public class Win {
static JFrame f = new JFrame()
static JButton jb = new JButton("上传")
public void Show() {
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser jfc = new JFileChooser()
if(jfc.showOpenDialog(f)==JFileChooser.APPROVE_OPTION ){
//解释下这里,d出个对话框,可以选择要上传的文件,如果选择了,就把选择的文件的绝对路径打印出来,有了绝对路径,通过JTextField的settext就能设置进去了,那个我没写
System.out.println(jfc.getSelectedFile().getAbsolutePath())
}
}
})
//这下面的不用在意 一些设置
f.add(jb)
f.setLayout(new FlowLayout())
f.setSize(480, 320)
// f.setDefaultCloseOperation(EXIT_ON_CLOSE)
f.setLocationRelativeTo(null)
f.setVisible(true)
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Win().Show()
}
}
2.选择文件夹路径在控制台输出
package com.dao
import javax.*
import javax.swing.*
import java.awt.*
import java.awt.event.ActionEvent//添加鼠标事件必备引用
import java.awt.event.ActionListener//添加鼠标事件必备引用
public class Test {
// extends JPanel implements ActionListener
static JFrame frame = new JFrame("")
static JPanel p = new JPanel()
JButton jb = new JButton("上传")
JFileChooser chooser
String choosertitle
public static void main(String s[]) {
new Test().Show()
}
public void Show() {
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int result
chooser = new JFileChooser()
chooser.setCurrentDirectory(new java.io.File("."))
chooser.setDialogTitle(choosertitle)
System.out.println("---"+choosertitle)
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
chooser.setAcceptAllFileFilterUsed(false)
if (chooser.showOpenDialog(p) == JFileChooser.APPROVE_OPTION) {
System.out.println("getCurrentDirectory(): "
+ chooser.getCurrentDirectory())
System.out.println("getSelectedFile() : "
+ chooser.getSelectedFile())
} else {
System.out.println("No Selection ")
}
}
})
// frame.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
//System.exit(0)
// }
// })
p.add(jb)
frame.add(p, "Center")
frame.setSize(320, 240)
frame.setVisible(true)
}
}
3.网上找的一些资料说明文件,没事看看。
JFileChooser
其实JFileChooser基本使用方法还是很简单的,下面写两个示例看了就明白了,如果还要增加一些功能,我们还可以添加过滤器,只显示过滤后的文件。还可以再保存的时候,如果保存的是目录里已经存在的文件,那么对话框不会关闭,并且d出一个JOptionPane提示用户是否保存文件。
打开文件对话框:
import java.io.File
import javax.swing.JFileChooser
import javax.swing.filechooser.FileFilter
public class FileChooserTest {
public static void main(String [] args) {
//首先是创建JFileChooser 对象,里面带个参数,表示默认打开的目录,这里是默认打开当前文件所在的目录。
JFileChooser file = new JFileChooser (".")
//下面这句是去掉显示所有文件这个过滤器。
file.setAcceptAllFileFilterUsed(false)
//添加excel文件的过滤器
file.addChoosableFileFilter(new ExcelFileFilter("xls"))
//添加exe文件的过滤器
file.addChoosableFileFilter(new ExcelFileFilter("exe"))
int result = file.showOpenDialog(null)
String fileName = file.getName()
int index = fileName.lastIndexOf('.')
if (index >0 &&index <fileName.length() - 1)
{
String extension = fileName.substring(index + 1).toLowerCase()
if (extension.equals(ext))
return true
}
return false
}
public String getDescription() {
if (ext.equals("xls"))
{
return "Microsoft Excel文件(*.xls)"
}
if(ext.equals("exe"))
{
return "可执行文件(*.exe)"
}
return ""
}
}
}
打开选择文件的对话框就建立好了。但是上面的程序还有瑕疵。因为只有当用户点取消或关闭该窗口时才不会执行任何 *** 作。而如果用户在对话框里输入的文件在当前目录中不存在时,那么窗口依然会关闭,这时可能就需要在程序中再来做判断。那么可不可以在当用户输入错误的文件名后,窗口不会关闭,而是不执行任何 *** 作或者d出个对话框提示用户,可以看看大多数window程序中的选择对话框都是这么做的,其实要实现这个功能也不难, 只需要再重写一下JFileChooser类的approveSelection()方法就行了。
我们将上面的程序做下修改,首先还是需要创建一个继承于JFileChooser的类,这个类可以写成外部或者内部类,我们这里依然写为内部类,注意,如果需要在静态方法中调用它,则需要将它设置为静态的。
private static class MyChooser extends JFileChooser {
MyChooser(String path) {
super(path)
}
public void approveSelection() {
File file = new File(getSelectedFile().getPath())
if (file.exists())
super.approveSelection()
else
JOptionPane.showMessageDialog(null, "你选择的文件不存在,请重新选择!")
}
把上面这段代码添加进刚才的类里面,然后把
JFileChooser file = new JFileChooser (".")改成
JFileChooser file = new MyChooser (".")
好了,现在我们就可以在不关闭该对话框的情况下判断用户的输入是否错误了。还可以加入正则表达式,判断用户输入是否符合规定, *** 作方式按照这个框架来写就没问题了。这里不再赘述。下面是保存对话框!
保存对话框:
其实保存对话框和打开文件对话框在使用上没什么区别,他们都是使用同一个类JFileChooser,因为在swing当中打开和保存对话框不会做出任何对文件进行处理的功能,所有的这些功能需要我们自己去实现,而仅仅是提供了1个这样的窗口模型而已。因此这两种窗口其实只是将按钮的标签进行了替换而已 。创建他们唯一的区别就是打开是调用showOpenDialog()方法,保存则是调用showSaveDialog(),创建形式几乎一样。我们在使用他们的时候就需要分别对这两种窗口的返回后进行不同的处理,设置过滤器是一样的,因此过滤器我们就复用上面打开文件窗口的方法,但是在判断输入保存文件是否在当前目录下时,我们需要做出不一样的处理。当用户输入了与当前目录相同的文件名后,要d出对话框询问用户是否需要覆盖原文件,如果用户选择否,那么返回保存文件的对话框允许用户继续选择或者输入保存的文件名。
下面我只需要修改上面代码的两个地方就能够达到目的。首先将修改一下MyChooser这个类
private static class MyChooser extends JFileChooser {
MyChooser(String path) {
super(path)
}
public void approveSelection() {
File file = this.getSelectedFile()
if (file.exists())
{
int copy = JOptionPane.showConfirmDialog(null,
"是否要覆盖当前文件?", "保存", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE)
if (copy == JOptionPane.YES_OPTION)
super.approveSelection()
}
else
super.approveSelection()
}
}
再把上面的
int result = file.showOpenDialog(null)
改成
int result = file.showSaveDialog(null)
两个基本的选择文件对话框就创建完成了。
如果需要多选,那么要设置setMultiSelectionEnabled(true)
那么File file = this.getSelectedFile()这句我们就要改成
File [] files = this.getSelectedFiles()
files这个数组里面就存放的是选择多个文件File对象,然后我们只需要对这个数组进行 *** 作即可。
答: JFrame中, 可以通过 jframe.remove(组件) 方法删除指定的组件 ,也可以通过jframe.add(组件) 方法来添加新的组件 . 值得注意的是,添加和删除组件之后,都需要更新窗口 , 否则可能显示异常
效果图
jp1 里输入用户名, 不能为空
jp1里输入了用户名
jp1被删除,然后显示jp2
参考代码
import javax.swing.*import java.awt.event.*
public class PanelFrame extends JFrame implements ActionListener {
JPanel jp1, jp2
JTextField jtf
JButton jb1
JLabel jl2
public PanelFrame() {
jp1 = new JPanel()
JLabel jl1 = new JLabel("请输入用户名")
jtf = new JTextField(8)
jb1 = new JButton("确定")
jb1.addActionListener(this)
jp1.add(jl1)
jp1.add(jtf)
jp1.add(jb1)
add(jp1)
// 窗口属性设置
setTitle("Demo")// 标题
setSize(380, 180)// 窗口大小
setLocationRelativeTo(null)// 窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE)// 窗口点击关闭时,退出程序
}
public static void main(String[] args) {
new PanelFrame().setVisible(true)
}
@Override
public void actionPerformed(ActionEvent e) {
if(jb1==e.getSource()) {
String name = jtf.getText().trim()
if(name.equals("")) {//验证是否输入了有效的字符串
JOptionPane.showMessageDialog(this, "请输入用户名~!")
return
}
remove(jp1)//删除jp1
jp2 = new JPanel()
jl2 = new JLabel()
jp2.add(jl2)
jl2.setText("欢迎:"+name)
add(jp2)//添加jp2
SwingUtilities.updateComponentTreeUI(this)//更新窗口!!
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)