现要用swing实现显示出制定文件夹下所有图片
利用 JButton 触发 在JPanel中显示某一文件夹下的所有图片文件,但是每一次点击JButton时显示的总是第一次输入文件夹目录后点击显示的那些图片(除非此后选择一图片更多的文件夹),总之前一个目录下的图片总是要盖住以后的。
请问是怎么回事?
public class first extends JFrame implements ActionListener {
Image image;
int new_w;
int new_h;
int framex=400;
int framey=300;
JPanel top = new JPanel();
JPanel center = new JPanel();
JTextField name = new JTextField(15);
Container cp = new Container();
public first() {
super("perfect");
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
setVisible(true);
}
public static void main(String[] args) {
new first();
}
private void init() {
JPanel top = new JPanel();
top.add(new JLabel("File :"));
top.add(name);
JButton b = new JButton("Show");
top.add(b);
cp = getContentPane();
cp.add(BorderLayout.NORTH, top);
name.setText("C:\");
setSize(new Dimension(framex, framey));
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String pURL = "C:\";
try {
pURL = name.getDocument().getText(0, name.getDocument().getLength());
} catch (BadLocationException e1) {
e1.printStackTrace();
}
//得到该制定文件夹下所有图片文件的名称
ArrayList<string> imga = imgFiles(pURL);
name.setText(pURL);
image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");
for(int dd = 0;dd<imga.size();dd++){ <br=""> }
center = new Mypanel(pURL,imga);
cp.add(BorderLayout.CENTER,center);
center.validate();
getContentPane().validate();
}
}
class Mypanel extends javax.swing.JPanel {
private static final long serialVersionUID = 1L;
private Image image;
private Image[] images;
private ArrayList<string> name;
Mypanel() {
//this.image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");
}
Mypanel(String parentURL,ArrayList<string> imgarray){
name = imgarray;
images = new Image[imgarray.size()];
for(int i=0;i<imgarray.size();i++){ <br="">
System.out.println("imgs "+i+": "+imgarray.get(i));
if(imgarray.get(i)!=null){
images[i] = Toolkit.getDefaultToolkit().getImage(parentURL+"\"+imgarray.get(i));
System.out.println("URL::"+parentURL+"\"+imgarray.get(i));
}
}
}
public void paintComponent(Graphics g) {
System.out.println("################### Enter paintComponent : "+this.getToolTipText());
int x = 0;
int y = 0;
for(int i=0;i<images.length;i++){ <br=""> //imgs[i] = Toolkit.getDefaultToolkit().getImage("C:\"+);
//if(images[])
//this.paintComponent(g);
if(name.get(i)!=null){
if(x==0) x=20;
else if(x+90+80<400) x=x+90;
else {
x=20;
y=y+70;
}
System.out.println("@@@@@@@ x:"+x+",y:"+y+" name = "+name.get(i)+" ");
g.drawImage(images[i], x, y,80,60, this);
}
}
}
}
问题补充:
firefly.li
不是因为没有刷新,
怀疑貌似是用了原来的JPanel对象,
可是从代码中找不出点儿头绪
请指点下吧
问题补充:
加上这些,代码就是全的了
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;
谢谢!
问题补充:
package nimgs;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;
public class first extends JFrame implements ActionListener {
Image image;
int new_w;
int new_h;
int framex=400;
int framey=700;
//ssJButton hh = new JButton();
JPanel top = new JPanel();
JPanel center = new JPanel();
JTextField name = new JTextField(15);
Container cp = new Container();
public first() {
super("perfect");
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
setVisible(true);
}
public static void main(String[] args) {
new first();
}
private void init() {
//hh.setBounds(new Rectangle(165, 225, 91, 37));
//hh.setText("picture ");
JPanel top = new JPanel();
top.add(new JLabel("File :"));
top.add(name);
JButton b = new JButton("Show");
top.add(b);
//b.addActionListener(nameListener);
if(center!=null)
cp.remove(center);
cp = getContentPane();
cp.add(BorderLayout.NORTH, top);
//cp.add(BorderLayout.CENTER,center);
//cp.add(new JScrollPane());
name.setText("C:\");
System.out.println("init before ActionListioned!!!!!!!!!!!!!!");
b.addActionListener(this);
System.out.println("init after ActionListioned!!!!!!!!!!!!!!");
//center = new Mypanel(pURL,imga);
cp.add(BorderLayout.CENTER,center);
//center.validate();
cp.validate();
//getContentPane().setLayout(null);
setSize(new Dimension(framex, framey));
// getContentPane().add(hh);
//cp.add(BorderLayout.SOUTH, panel);
//cp.setVisible(true);
//top.add(new JLabel("File :"));
//getContentPane().BorderLayout(top);
}
public void actionPerformed(ActionEvent e) {
center.removeAll();
String pURL = "C:\";
try {
pURL = name.getDocument().getText(0, name.getDocument().getLength());
System.out.println(pURL);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
ArrayList<string> imga = imgFiles(pURL);
name.setText(pURL);
//ImageIcon img = new ImageIcon("Winter.jpg");
//Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");
//image = img.getImage();
image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");
for(int dd = 0;dd<imga.size();dd++){ <br="">System.out.println("imagename~~~:"+imga.get(dd));
}
//Mypanel panel = new Mypanel(pURL,imga);
center = new Mypanel(pURL,imga);
//****************************
//center = null;
//center = panel;
//panel.setBounds(new Rectangle(1, 50, 300, 700));
//getContentPane().add(panel);
//center.repaint();
//cp.add(BorderLayout.CENTER,null);
// cp.add(BorderLayout.CENTER,center);
// center.validate();
// getContentPane().validate();
if(center!=null)
cp.remove(center);
center = new Mypanel(pURL,imga);
cp.add(BorderLayout.CENTER,center);
//center.validate();
cp.validate();
//getContentPane().repaint();
//getContentPane().setVisible(true);
//panel.setVisible(true);
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e1) {
// System.out.println(e1);
// }
//getContentPane().repaint();
}
@SuppressWarnings("unchecked")
private ArrayList<string> imgFiles(String parentURL){
String houzhui = new String();
File file = new File(parentURL);
//File file = new File("C:\");
int o = 0;
ArrayList<string> imgarr = new ArrayList();
//String imgs[] = new String[5];
String ss[] = file.list();
//int o=0;
System.out.println("ss.length = "+ss.length);
for(int i=0;i<ss.length;i++){ <br=""> //System.out.println("file:"+ss[i]+" @@ is File:"+(new File("C:\"+ss[i])).isFile());
if(ss[i].indexOf(".")>0 && (new File(file,ss[i])).isFile()){
houzhui = ss[i].substring(ss[i].lastIndexOf(".")+1,ss[i].length()).toLowerCase();
//System.out.println(houzhui);
if(houzhui.equals("jpg")
||houzhui.equals("gif")
||houzhui.equals("png")
//||houzhui.equals("bmp")
||houzhui.equals("jpeg")
){
o++;
//System.out.println("imgarr:"+o+" "+ss[i]);
//imgs[o] = ss[i];
imgarr.add(ss[i]);
//System.out.println("imgs:"+imgs[o]);
//o++;
//deitel = getImage(getDocumentBase(), ss[i]);
//int width = deitel.getWidth(this);
//int heigh = deitel.getHeight(this);
//System.out.println("----------------------"+ss[i]+" "+o+" width:"+width+" heigh:"+heigh);
//g.drawImage(deitel, 1+(100*o), 30, 80, 60, this);
//g.setPaintMode();
//g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)
//g.drawImage(deitel, 150, 30, width / 8, heigh / 8, this);
}
}
}
return imgarr;
}
}
class Mypanel extends javax.swing.JPanel {
private static final long serialVersionUID = 1L;
private Image image;
private Image[] images;
private ArrayList<string> name;
Mypanel() {
//this.image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");
}
Mypanel(String parentURL,ArrayList<string> imgarray){
//System.out.println("$$$$$$$$$$$$$");
name = imgarray;
images = new Image[imgarray.size()];
//System.out.println("imgarray.size(): "+imgarray.size());
for(int i=0;i<imgarray.size();i++){ <br="">
System.out.println("imgs "+i+": "+imgarray.get(i));
if(imgarray.get(i)!=null){
images[i] = Toolkit.getDefaultToolkit().getImage(parentURL+"\"+imgarray.get(i));
System.out.println("URL::"+parentURL+"\"+imgarray.get(i));
}
}
}
public void paintComponent(Graphics g1) {
System.out.println("################### Enter paintComponent : "+this.getToolTipText());
int x = 0;
int y = 0;
Graphics g = (Graphics)g1;
for(int i=0;i<images.length;i++){ <br=""> //imgs[i] = Toolkit.getDefaultToolkit().getImage("C:\"+);
//if(images[])
//this.paintComponent(g);
if(name.get(i)!=null){
if(x==0) x=20;
else if(x+90+80<400) x=x+90;
else {
x=20;
y=y+70;
}
System.out.println("@@@@@@@ x:"+x+",y:"+y+" name = "+name.get(i)+" ");
g.drawImage(images[i], x, y,80,60, this);
}
}
g=null;
}
}
问题补充:
上面才是全部代码 谢谢!
(swing)用一个JPanel显示本地文件夹下多个图片的问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
hunterli0408 2008-12-30 09:17关注代码我稍微修改了一下,已经OK。
原来的代码对于center的使用一点混乱。
lz先看一下,有什么问题再联系我。[code="java"]
package nimgs;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;public class First extends JFrame implements ActionListener {
JPanel top = new JPanel(); Mypanel center = new Mypanel(); JTextField name = new JTextField(15); JButton show = new JButton("Show"); public First() { super("perfect"); setDefaultCloseOperation(EXIT_ON_CLOSE); init(); setVisible(true); } public static void main(String[] args) { new First(); } private void init() { top.add(new JLabel("File :")); top.add(name); name.setText("C:\\"); top.add(show); show.addActionListener(this); this.add(BorderLayout.NORTH, top); this.add(BorderLayout.CENTER, center); setSize(400, 700); } public void actionPerformed(ActionEvent e) { try { center.removeAll(); String pURL = ""; pURL = name.getText(0, name.getText().length()); ArrayList<String> imga = imgFiles(pURL); center.setImages(pURL, imga); this.validate(); this.repaint(); } catch (BadLocationException ex) { } } @SuppressWarnings("unchecked") private ArrayList<String> imgFiles(String parentURL) { String houzhui = new String(); File file = new File(parentURL); ArrayList<String> imgarr = new ArrayList(); String ss[] = file.list(); for (int i = 0; i < ss.length; i++) { if (new File(file, ss[i]).isFile()) { houzhui = ss[i].toLowerCase(); if (houzhui.endsWith(".jpg") || houzhui.endsWith(".gif") || houzhui.endsWith(".png") || houzhui.endsWith(".jpeg")) { imgarr.add(ss[i]); } } } return imgarr; }}
[code][code="java"]
package nimgs;import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.ArrayList;class Mypanel extends javax.swing.JPanel {
private static final long serialVersionUID = 1L; private Image[] images; private ArrayList<String> name; Mypanel() { } public void setImages(String parentURL, ArrayList<String> imgarray) { name = imgarray; images = new Image[imgarray.size()]; for (int i = 0; i < imgarray.size(); i++) { System.out.println("imgs " + i + ": " + imgarray.get(i)); if (imgarray.get(i) != null) { images[i] = Toolkit.getDefaultToolkit().getImage( parentURL + "\\" + imgarray.get(i)); System.out.println("URL::" + parentURL + "\\" + imgarray.get(i)); } } } @Override public void paintComponent(Graphics g1) { int x = 0; int y = 0; Graphics g = (Graphics) g1; for (int i = 0; i < images.length; i++) { if (name.get(i) != null) { if (x == 0) { x = 20; } else if (x + 90 + 80 < 400) { x = x + 90; } else { x = 20; y = y + 70; } System.out.println("@@@@@@@ x:" + x + ",y:" + y + " name = " + name.get(i) + " "); g.drawImage(images[i], x, y, 80, 60, this); } } g = null; }}
[code]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报