Java File folder=fc.getSelectedFile(); File[]files=folder.listFiles(新文件过滤器(){ @凌驾 公共布尔接受(文件路径名){ String name=pathname.getName().toLowerCase(); 返回名称.endsWith(“.jpg”) ||name.endsWith(“.png”) ||name.endsWith(“.gif”); } }); model.removeAllElements(); FileModel=getModel(); 用于(文件:文件){ 模型补遗(文件); } if(model.getSize()>0){ model.setSelectedItem(model.getElementAt(0)); } 打破 } } } 公共类FileModel扩展了DefaultComboxModel{ } 公共抽象类AbstractNavigationAction扩展了AbstractAction{ 私有文件模型文件模型; 私人int方向; 公共抽象导航操作(FileModel FileModel,int方向){ this.fileModel=fileModel; 这个方向=方向; fileModel.addListDataListener(新ListDataListener(){ @凌驾 添加了公共无效间隔(ListDataEvent e){ 不动产(); } @凌驾 删除公共无效间隔(ListDataEvent e){ 不动产(); } @凌驾 公共无效内容更改(ListDataEvent e){ 不动产(); } }); 不动产(); } 受保护的不动产(){ setEnabled(getFileModel().getSize()>0); } 公共文件模型getFileModel(){ 返回文件模型; } 公共int getDirection(){ 返回方向; } @凌驾 已执行的公共无效操作(操作事件e){ FileModel=getFileModel(); if(model.getSize()>0){ File=(File)model.getSelectedItem(); int index=model.getIndexOf(文件); 指数+=方向; 如果(指数=model.getSize()){ 指数=0; } file=model.getElementAt(索引); model.setSelectedItem(文件); } } } 公共类PrevAction扩展了AbstractNavigationAction{ 公共PrevAction(文件模型文件模型){ super(fileModel,-1); putValue(名称“”); } } }
错误很多,我将帮助您纠正这些错误 首先,Java File folder=fc.getSelectedFile(); File[]files=folder.listFiles(新文件过滤器(){ @凌驾 公共布尔接受(文件路径名){ String name=pathname.getName().toLowerCase(); 返回名称.endsWith(“.jpg”) ||name.endsWith(“.png”) ||name.endsWith(“.gif”); } }); model.removeAllElements(); FileModel=getModel(); 用于(文件:文件){ 模型补遗(文件); } if(model.getSize()>0){ model.setSelectedItem(model.getElementAt(0)); } 打破 } } } 公共类FileModel扩展了DefaultComboxModel{ } 公共抽象类AbstractNavigationAction扩展了AbstractAction{ 私有文件模型文件模型; 私人int方向; 公共抽象导航操作(FileModel FileModel,int方向){ this.fileModel=fileModel; 这个方向=方向; fileModel.addListDataListener(新ListDataListener(){ @凌驾 添加了公共无效间隔(ListDataEvent e){ 不动产(); } @凌驾 删除公共无效间隔(ListDataEvent e){ 不动产(); } @凌驾 公共无效内容更改(ListDataEvent e){ 不动产(); } }); 不动产(); } 受保护的不动产(){ setEnabled(getFileModel().getSize()>0); } 公共文件模型getFileModel(){ 返回文件模型; } 公共int getDirection(){ 返回方向; } @凌驾 已执行的公共无效操作(操作事件e){ FileModel=getFileModel(); if(model.getSize()>0){ File=(File)model.getSelectedItem(); int index=model.getIndexOf(文件); 指数+=方向; 如果(指数=model.getSize()){ 指数=0; } file=model.getElementAt(索引); model.setSelectedItem(文件); } } } 公共类PrevAction扩展了AbstractNavigationAction{ 公共PrevAction(文件模型文件模型){ super(fileModel,-1); putValue(名称“”); } } },java,image,swing,events,Java,Image,Swing,Events,错误很多,我将帮助您纠正这些错误 首先,FileDialog-fdial应该放在类attr上。稍后引用它,但不要创建局部变量 现在问题出在actionPerformed方法中。首先,equals方法不起作用,因为getActionCommand返回的字符串不对应 在方法actionPerformed中,您应该在不同的情况之间切换,然后退出,仅此而已 用于在文件列表中保留当前文件的j变量。增加和减少它不应超过数组的边界或ArrayIndexOfBoundException 固定代码为: publi
FileDialog-fdial代码>应该放在类attr上。稍后引用它,但不要创建局部变量
现在问题出在actionPerformed
方法中。首先,equals
方法不起作用,因为getActionCommand
返回的字符串不对应
在方法actionPerformed
中,您应该在不同的情况之间切换,然后退出,仅此而已
用于在文件列表中保留当前文件的j
变量。增加和减少它不应超过数组的边界或ArrayIndexOfBoundException
固定代码为:
public class picframe extends Thread implements ActionListener
{
JTree tr;
JScrollPane jsp;
JFrame f;
JButton b1,b2,b3;
JLabel lab;
File fl;
File[] flist;
ImageIcon ig;
int k,j=0;
FileDialog fdial;
picframe ()
{
f=new JFrame("My Frame");
f.setVisible(true);
f.setLayout(null);
lab=new JLabel();
lab.setBounds(100,50,1166,500);
f.add(lab);
b1=new JButton(" <| ");
b1.setBounds(486,600,100,30);
b1.setEnabled(false);
f.add(b1);
b1.addActionListener(this);
b2=new JButton(" |> ");
b2.setBounds(786,600,100,30);
f.add(b2);
b2.setEnabled(false);
b2.addActionListener(this);
b3=new JButton("Open");
b3.setBounds(633,650,100,30);
f.add(b3);
b3.addActionListener(this);
f.pack();
f.setSize(1366,768);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getActionCommand().equals("Open"))
{
fdial=new FileDialog(f,"Open Box",FileDialog.LOAD);
fdial.setSize(300,300);
fdial.setVisible(true);
String str=fdial.getDirectory();
fl=new File(str);
flist=fl.listFiles();
b2.setEnabled(true);
j = 0;
if (flist != null)
while(j<flist.length)
{
if(flist[j].isFile())
{
if(flist[j].getName().toLowerCase().endsWith(".jpg"))
{
ig=new ImageIcon(fdial.getDirectory()+flist[j].getName());
lab.setIcon(ig);
break;
}
}
j++;
}
}
if(ae.getActionCommand().equals(" <| "))
{
--j;
if (flist != null)
if(j<0 ) {
j = -1;
lab.setText("no image");
} else {
while(j<flist.length)
{
if(flist[j].isFile())
{
if(flist[j].getName().toLowerCase().endsWith(".jpg"))
{
ig=new ImageIcon(fdial.getDirectory()+flist[j].getName());
lab.setIcon(ig);
b1.setEnabled(true);
break;
}
}
j--;
}
}
}
if(ae.getActionCommand().equals(" |> "))
{
++j;
if (flist != null)
if(j>=flist.length){
j = flist.length;
lab.setText("no image");
} else {
while(j<flist.length)
{
if(flist[j].isFile())
{
if(flist[j].getName().toLowerCase().endsWith(".jpg"))
{
ig=new ImageIcon(fdial.getDirectory()+flist[j].getName());
lab.setIcon(ig);
b1.setEnabled(true);
break;
}
}
j++;
}
}
}
}
public static void main(String args[])
{
new picframe ();
}
}
公共类picframe扩展线程实现ActionListener
{
JTree-tr;
JScrollPane-jsp;
jf框架;
按钮b1、b2、b3;
JLabel实验室;
文件fl;
文件[]flist;
图像图标;
int k,j=0;
文件对话框;
picframe()
{
f=新JFrame(“我的框架”);
f、 setVisible(真);
f、 setLayout(空);
lab=新的JLabel();
实验室设置边界(100,501166500);
f、 添加(实验室);
b1=新的JButton(“”);
b2.立根(786600100,30);
f、 添加(b2);
b2.设置启用(错误);
b2.addActionListener(本);
b3=新的按钮(“打开”);
b3.立根(633650100,30);
f、 添加(b3);
b3.添加ActionListener(本);
f、 包装();
f、 设置大小(1366768);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
已执行的公共无效行动(行动事件ae)
{
如果(ae.getActionCommand().equals(“打开”))
{
fdial=新建文件对话框(f,“打开框”,FileDialog.LOAD);
fdial.setSize(300300);
fdial.setVisible(真);
字符串str=fdial.getDirectory();
fl=新文件(str);
flist=fl.listFiles();
b2.设置启用(真);
j=0;
如果(flist!=null)
虽然没有fdial.getDirectory(),但图像不会显示。如果你想查看,可以查看它!对不起,你是对的,但是你可以简单地使用flist[j]
,它包含你感兴趣的文件的路径和名称。我更新了“更新2”这是一个很好的完整的例子,可能是对其他一些问题的回答,不确定它是否适合OP的问题。@romanc是的,我试图解释OP试图做什么,并决定展示一个可能的解决方案。我的主要观点是我们可以说,试图修复一些根本上被破坏的东西是不好的做法,但我们也可以说教人们钓鱼(这就是为什么我喜欢你的答案)我不确定我是否考虑过创建对FileDialogpublic class BetterBrowser {
public static void main(String[] args) {
new BetterBrowser();
}
public BetterBrowser() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new BrowserPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class BrowserPane extends JPanel {
private FileModel fileModel;
private JButton open;
private JButton next;
private JButton prev;
private JLabel image;
public BrowserPane() {
fileModel = new FileModel();
setLayout(new BorderLayout());
JToolBar tb = new JToolBar();
tb.add((open = new JButton(new OpenAction(fileModel))));
add(tb, BorderLayout.NORTH);
JPanel navPane = new JPanel(new FlowLayout(FlowLayout.CENTER));
navPane.add((prev = new JButton(new PrevAction(fileModel))));
navPane.add((next = new JButton(new NextAction(fileModel))));
add(navPane, BorderLayout.SOUTH);
add(new JScrollPane((image = new JLabel())));
fileModel.addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
}
@Override
public void intervalRemoved(ListDataEvent e) {
}
@Override
public void contentsChanged(ListDataEvent e) {
if (e.getIndex0() == -1 && e.getIndex1() == -1) {
File file = (File) fileModel.getSelectedItem();
try {
ImageIcon icon = new ImageIcon(ImageIO.read(file));
image.setIcon(icon);
} catch (IOException exp) {
exp.printStackTrace();;
image.setIcon(null);
}
}
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
}
public class OpenAction extends AbstractAction {
private FileModel model;
public OpenAction(FileModel model) {
this.model = model;
putValue(NAME, "Open");
}
public FileModel getModel() {
return model;
}
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
switch (fc.showOpenDialog((Component) e.getSource())) {
case JFileChooser.APPROVE_OPTION:
File folder = fc.getSelectedFile();
File[] files = folder.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
String name = pathname.getName().toLowerCase();
return name.endsWith(".jpg")
|| name.endsWith(".png")
|| name.endsWith(".gif");
}
});
model.removeAllElements();
FileModel model = getModel();
for (File file : files) {
model.addElement(file);
}
if (model.getSize() > 0) {
model.setSelectedItem(model.getElementAt(0));
}
break;
}
}
}
public class FileModel extends DefaultComboBoxModel<File> {
}
public abstract class AbstractNavigationAction extends AbstractAction {
private FileModel fileModel;
private int direction;
public AbstractNavigationAction(FileModel fileModel, int direction) {
this.fileModel = fileModel;
this.direction = direction;
fileModel.addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
updateState();
}
@Override
public void intervalRemoved(ListDataEvent e) {
updateState();
}
@Override
public void contentsChanged(ListDataEvent e) {
updateState();
}
});
updateState();
}
protected void updateState() {
setEnabled(getFileModel().getSize() > 0);
}
public FileModel getFileModel() {
return fileModel;
}
public int getDirection() {
return direction;
}
@Override
public void actionPerformed(ActionEvent e) {
FileModel model = getFileModel();
if (model.getSize() > 0) {
File file = (File) model.getSelectedItem();
int index = model.getIndexOf(file);
index += direction;
if (index < 0) {
index = model.getSize() - 1;
} else if (index >= model.getSize()) {
index = 0;
}
file = model.getElementAt(index);
model.setSelectedItem(file);
}
}
}
public class PrevAction extends AbstractNavigationAction {
public PrevAction(FileModel fileModel) {
super(fileModel, -1);
putValue(NAME, "< Previous");
}
}
public class NextAction extends AbstractNavigationAction {
public NextAction(FileModel fileModel) {
super(fileModel, 1);
putValue(NAME, "Next >");
}
}
}
public class picframe extends Thread implements ActionListener
{
JTree tr;
JScrollPane jsp;
JFrame f;
JButton b1,b2,b3;
JLabel lab;
File fl;
File[] flist;
ImageIcon ig;
int k,j=0;
FileDialog fdial;
picframe ()
{
f=new JFrame("My Frame");
f.setVisible(true);
f.setLayout(null);
lab=new JLabel();
lab.setBounds(100,50,1166,500);
f.add(lab);
b1=new JButton(" <| ");
b1.setBounds(486,600,100,30);
b1.setEnabled(false);
f.add(b1);
b1.addActionListener(this);
b2=new JButton(" |> ");
b2.setBounds(786,600,100,30);
f.add(b2);
b2.setEnabled(false);
b2.addActionListener(this);
b3=new JButton("Open");
b3.setBounds(633,650,100,30);
f.add(b3);
b3.addActionListener(this);
f.pack();
f.setSize(1366,768);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getActionCommand().equals("Open"))
{
fdial=new FileDialog(f,"Open Box",FileDialog.LOAD);
fdial.setSize(300,300);
fdial.setVisible(true);
String str=fdial.getDirectory();
fl=new File(str);
flist=fl.listFiles();
b2.setEnabled(true);
j = 0;
if (flist != null)
while(j<flist.length)
{
if(flist[j].isFile())
{
if(flist[j].getName().toLowerCase().endsWith(".jpg"))
{
ig=new ImageIcon(fdial.getDirectory()+flist[j].getName());
lab.setIcon(ig);
break;
}
}
j++;
}
}
if(ae.getActionCommand().equals(" <| "))
{
--j;
if (flist != null)
if(j<0 ) {
j = -1;
lab.setText("no image");
} else {
while(j<flist.length)
{
if(flist[j].isFile())
{
if(flist[j].getName().toLowerCase().endsWith(".jpg"))
{
ig=new ImageIcon(fdial.getDirectory()+flist[j].getName());
lab.setIcon(ig);
b1.setEnabled(true);
break;
}
}
j--;
}
}
}
if(ae.getActionCommand().equals(" |> "))
{
++j;
if (flist != null)
if(j>=flist.length){
j = flist.length;
lab.setText("no image");
} else {
while(j<flist.length)
{
if(flist[j].isFile())
{
if(flist[j].getName().toLowerCase().endsWith(".jpg"))
{
ig=new ImageIcon(fdial.getDirectory()+flist[j].getName());
lab.setIcon(ig);
b1.setEnabled(true);
break;
}
}
j++;
}
}
}
}
public static void main(String args[])
{
new picframe ();
}
}