一个实现图片浏览器的例子,请高手过来看看

sally0156 2003-10-21 10:03:58
老是出现Unable to evaluate loadFilePaths(selDriver)提示。
功能用不了
package picviewer;

import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.io.File;
import java.awt.event.*;
import java.util.Enumeration;
import javax.swing.event.*;

public class FrameOfPicViewer extends JFrame {
private BorderLayout borderLayout1 = new BorderLayout();
private JLabel jLabel1 = new JLabel();
private JLabel StatusBar = new JLabel();
private JPanel MailPanel = new JPanel();
private GridLayout gridLayout1 = new GridLayout();
private JPanel LeftPanel = new JPanel();
private JPanel RightPanel = new JPanel();
private BorderLayout borderLayout2 = new BorderLayout();
private BorderLayout borderLayout3 = new BorderLayout();
private JComboBox CmbDrivers = new JComboBox();
TreeNode root;
DefaultTreeModel model;
String selDriver = "";
String selFilePath = "";
boolean runState = false;
boolean selState = false;
private JScrollPane jScrollPane1 = new JScrollPane();
private JTree TreFileList = new JTree();


public FrameOfPicViewer() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
FrameOfPicViewer frameOfPicViewer = new FrameOfPicViewer();
}
private void jbInit() throws Exception {
jLabel1.setToolTipText("");
jLabel1.setText("请选择图片文件:");
this.setTitle("图片浏览 器");
this.getContentPane().setLayout(borderLayout1);
StatusBar.setText(" ");
MailPanel.setLayout(gridLayout1);
gridLayout1.setColumns(2);
LeftPanel.setLayout(borderLayout2);
RightPanel.setLayout(borderLayout3);
TreFileList.setBorder(BorderFactory.createLoweredBevelBorder());
TreFileList.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
TreFileList_valueChanged(e);
}
});
CmbDrivers.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(ItemEvent e) {
CmbDrivers_itemStateChanged(e);
}
});
this.getContentPane().add(jLabel1, BorderLayout.NORTH);
this.getContentPane().add(StatusBar, BorderLayout.SOUTH);
this.getContentPane().add(MailPanel, BorderLayout.CENTER);
MailPanel.add(LeftPanel, null);
MailPanel.add(RightPanel, null);
LeftPanel.add(jScrollPane1, BorderLayout.CENTER);
LeftPanel.add(CmbDrivers, BorderLayout.NORTH);
jScrollPane1.getViewport().add(TreFileList, null);

//读取驱动器的信息并将其添加到下拉列表CmbDrivers中
loadDrivers(CmbDrivers);
//得到CmbDrivers中所选择的驱动器名称
selDriver = CmbDrivers.getSelectedItem().toString().trim();
//读取该驱动器中的目录结构并创建相应的树结构
root = loadFilePaths(selDriver);
//完成树结构的创建
model = new DefaultTreeModel(root);
TreFileList = new JTree(model);
jScrollPane1.getViewport().add(TreFileList,null);
//设置树组件节点的显示图形
DefaultTreeCellRenderer render = new DefaultTreeCellRenderer();
render.setClosedIcon(new ImageIcon("images/closed.gif"));
render.setOpenIcon(new ImageIcon("images/open.gif"));
render.setLeafIcon(new ImageIcon("images/leaf.gif"));
TreFileList.setCellRenderer(render);
int selModel = TreeSelectionModel.SINGLE_TREE_SELECTION;
//指定树组件的选择模式
TreFileList.getSelectionModel().setSelectionMode(selModel);
//设置框架的水小
setSize(600,300);
selState = true;
show();
}
private void loadDrivers(JComboBox cmbBox){
File currentPath = new File(".");
File[] drivers = currentPath.listRoots();
//得到计算机中所有驱动器的名称
for(int i=0;i<=drivers.length-1;i++){
cmbBox.addItem(drivers[i].toString());
}
//缺省值设置为当前路径的驱动器
String path = currentPath.getAbsolutePath();
for(int i=0;i<=drivers.length-1;i++){
if(path.indexOf(cmbBox.getItemAt(i).toString().trim())>=0){
cmbBox.setSelectedItem(cmbBox.getItemAt(i));
break;
}
}
}

void CmbDrivers_itemStateChanged(ItemEvent e) {
selState = false;
String strDriver = CmbDrivers.getSelectedItem().toString().trim();
if(runState && !strDriver.equals(selDriver)){
DefaultMutableTreeNode newRoot = (DefaultMutableTreeNode)loadFilePaths(strDriver);
Enumeration childs = ((DefaultMutableTreeNode)root).children();
while(childs.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)childs.nextElement();
model.removeNodeFromParent(node);
}
for(int i=1;i<=newRoot.getChildCount();i++){
model.insertNodeInto((DefaultMutableTreeNode)newRoot.getChildAt(i-1),(DefaultMutableTreeNode)root,0);
}
model.reload(root);
selDriver = strDriver;
}
selState = true;
}
private TreeNode loadFilePaths(String rootPath){
StatusBar.setText(" ");
File path = new File(rootPath);
DefaultMutableTreeNode root = new DefaultMutableTreeNode(path.getName().trim());
DefaultTreeModel model = new DefaultTreeModel(root);
File[] childsOfPath = path.listFiles();
for(int i=0;i<=childsOfPath.length-1;i++){
String name = childsOfPath[i].getName().trim();
if(childsOfPath[i].isDirectory()){
DefaultMutableTreeNode childRoot;
childRoot = (DefaultMutableTreeNode)loadFilePaths(childsOfPath[i].getAbsolutePath());
if(childRoot.getChildCount()>0)
root.add(childRoot);
}else{
int c = name.lastIndexOf(".");
String fileType = name.substring(c+1).toUpperCase();
if(fileType.equals("JPG") || fileType.equals("GIF")){
DefaultMutableTreeNode childRoot = new DefaultMutableTreeNode(name);
root.add(childRoot);
}
}
}
return root;
}
void loadPic(String picName){
ImageIcon img = new ImageIcon(picName);
int pWidth = RightPanel.getWidth();
int pHeight = RightPanel.getHeight();
int mWidth = img.getIconWidth();
int mHeight = img.getIconHeight();
int x,y;
int width,height;
if((mWidth<=pWidth)&&(mHeight<=pHeight)){
x = (pWidth-mWidth)/2;
y = (pHeight-mHeight)/2;
width = mWidth;
height = mHeight;
}else{
width = pWidth; height = pHeight;
float widthScale = (float)pWidth/(float)mWidth;
float heightScale = (float)pHeight/(float)mHeight;
if(widthScale<heightScale)
height=(int)(mHeight*widthScale);
else
width=(int)(mWidth*heightScale);
x=(pWidth-width)/2;
y=(pHeight-height)/2;
}
StatusBar.setText("文件:"+picName+" 大小"+mWidth+"X"+mHeight);
RightPanel.getGraphics().clearRect(0,0,pWidth,pHeight);
RightPanel.getGraphics().drawImage(img.getImage(),x,y,width,height,this);
}

void TreFileList_valueChanged(TreeSelectionEvent e) {
if(selState){
TreePath path = TreFileList.getSelectionPath();
DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
if(node.isLeaf()){
String selFile = "";
String strPath = path.toString();
strPath = strPath.replace('[',' ');
strPath = strPath.replace(']',' ').trim();
for(int i=1;i<=path.getPathCount()-1;i++){
int c=strPath.lastIndexOf(",");
selFile=strPath.substring(c+1).trim()+"\\"+selFile;
strPath=strPath.substring(0,c);
}
selFile = selDriver + selFile.substring(0,selFile.length()-1).trim();
loadPic(selFile);
}
}
}
}
...全文
42 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
myan18 2003-11-18
  • 打赏
  • 举报
回复
我看了。
没看明白。呜呜。。。。
sally0156 2003-10-21
  • 打赏
  • 举报
回复
没人过来看啊

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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