【开贴感谢】--李晔兄和Linyv(vv)兄请进

KomaX 2003-12-03 03:38:31
非常感谢李晔兄和Linyv(vv)兄在百忙之中抽出时间来回答我一个菜鸟的问题,
特别是李兄之诲人不倦态度令我感到CSDN的温暖。

虽然自己分不多,但是分数除了拿来散,更是应该给像李兄和Linyv(vv)兄这样热心帮助别人的Goodman。

再次感谢 :)
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KomaX 2003-12-04
  • 打赏
  • 举报
回复
今天我出去了,刚刚回来~~

谢谢Night兄和翎羽兄~~

thuers 2003-12-04
  • 打赏
  • 举报
回复
看看什么事。。。
Nightlee 2003-12-04
  • 打赏
  • 举报
回复
一點改進,建議你仔細看一下javadoc

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class FileDir extends JFrame implements MouseListener{
private JButton jButton1 = new JButton();
private JScrollPane jScrollPane1 = new JScrollPane();
JFileChooser fc=new JFileChooser();
DefaultTableModel model=new DefaultTableModel(new Object[]{"DIRECTION"},0);
private JTable jTable1 = new JTable(model);

public FileDir() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
this.getContentPane().add(jButton1, BorderLayout.NORTH);
this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
jScrollPane1.getViewport().add(jTable1, null);

jTable1.addMouseListener(this);//add listener on table

this.setSize(400,300);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

void jButton1_actionPerformed(ActionEvent e) {

fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.showOpenDialog(this);
File f=fc.getSelectedFile();
String path=f.getPath();
String[] list=f.list();
File sf;

for(int i=0;i<model.getRowCount();i++){//if you want remove old record when you click the button,use this
model.removeRow(i);
}

for(int i=0;i<list.length;i++){
sf=new File(path+"/"+list[i]);
if(sf.isDirectory()){
model.addRow(new Object[]{sf.getName()});
}
}
}

String rt="";//target String

public void mouseClicked(MouseEvent e){
//if(e.getClickCount()>1){// if you want use this,you must set the table "READLY ONLY"
String temp=jTable1.getValueAt(jTable1.getSelectedRow(),jTable1.getSelectedColumn()).toString();
if(JOptionPane.showConfirmDialog(this,"Open "+temp)==0){//confirm OK
rt=temp;
}
else{
rt="no confirm";
}
System.out.println(rt);
//}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}


public static void main(String[] s){
new FileDir();
}
}
Linyv 2003-12-04
  • 打赏
  • 举报
回复
package ll.ui.filetable;

import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.event.*;
/**
* @author linyvlu
*
*/
public class FileTable extends JFrame{

private JPanel _plOpenFile = new JPanel();
private JButton _btnOpenFile = new JButton("Open...");
private JTable _tblFiles = new JTable();
private JFileChooser _fchDir = new JFileChooser();
private FileTableModel _model = new FileTableModel();

public static void main(String[] args){
JFrame frame = new FileTable();
frame.pack();
frame.setSize(800,600);
frame.show();
}

public FileTable(){
init();
}

private void init(){
_fchDir.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
_plOpenFile.add(_btnOpenFile);
_tblFiles.setModel(_model);
getContentPane().add(_plOpenFile,BorderLayout.NORTH);
getContentPane().add(new JScrollPane(_tblFiles),BorderLayout.CENTER);
initListeners();
}

private void initListeners() {
_btnOpenFile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
int result = _fchDir.showOpenDialog(FileTable.this);
if (result == JFileChooser.APPROVE_OPTION) {
File f = _fchDir.getSelectedFile();
_model.setRoot(f);
_model.fireTableDataChanged();
}
}
});
_tblFiles.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent event){
if(event.getClickCount()==2&&SwingUtilities.isLeftMouseButton(event)){
int selectedRow = _tblFiles.getSelectedRow();
if(selectedRow==-1) return;
File f = _model.getDirectory(selectedRow);
processDoubleClicked(f);
}
}
});
}

private void processDoubleClicked(File f){
System.out.println("double clicked!");
}



class FileTableModel extends AbstractTableModel{

private java.util.List _dirs = new ArrayList();

public int getRowCount(){
return _dirs.size();
}

public int getColumnCount(){
return 1;
}

public Object getValueAt(int row,int col){
return _dirs.get(row);
}

public void setRoot(File root){
getDirectoryChildren(root);
}


public String getColumnName(int col){
return "Children";

}

public File getDirectory(int row){
if(row>=_dirs.size())
throw new IllegalArgumentException("error in getDirectory()");
return (File)_dirs.get(row);
}

private void getDirectoryChildren(File root){
_dirs.clear();
File[] files = root.listFiles();
for(int i=0,size=files.length;i<size;i++){
File f = files[i];
if(f.isDirectory()){
_dirs.add(f);
}
}
}
}
}

只要在processDoubleClicked()部分加上自己的代码就可以了。
KomaX 2003-12-03
  • 打赏
  • 举报
回复
李晔兄和Linyv(vv)兄呢?:)

估计又在热心帮助人了 :)

UP 让他们看到
KomaX 2003-12-03
  • 打赏
  • 举报
回复
我把李兄的程序最后改为:
if(sf.isDirectory()){
model.addRow(new Object[]{sf.getName(),sf.getPath()});
}

这样就可以显示目录名和目录路径地址(我事先已经加了一列了)

但是有个问题,李兄的每次Open都会在上一次打开的情况下继续往Table下面添加。
要是每次调用open按钮都可以刷新table,应该怎么该呢?或者加一个按钮?

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧