现要用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;
}
}
问题补充:
上面才是全部代码 谢谢!
代码我稍微修改了一下,已经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]
代码没仔细看,估计是因为没有刷新的缘故。
每次装载新图片之后,调用
JPanel.updateUI()
或者
JPanel.validate();
JPanel.repaint();
lz的代码不全,我也没法运行调试呀