我有一个java程序简单的不能再简单的东西了。还是出错。我看了好长时间了。不知道哪里出问题了。说真的。看了很长的时间了。就这个没有搞定。csdn的高手们能看看不能。先谢了。我现在在设计一个图片浏览器的Java小程序,主要就是模仿windows的图片浏览的功能。
前面的前个后个图片文件的浏览。放大和缩小。都比较容易。可是后面的水平翻转和左右翻转按钮点击后,没有事件响应。请前辈指点!完整代码如下:IDE:Eclipse import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;import java.awt.image.*;//
import javax.swing.JOptionPane;//
import java.io.File;
//205217571226yu
public class ImageViewer extends Frame implements ActionListener, FileFilter {
private static JFrame frame=new JFrame("ImageViewer");
Panel p,view;
JButton bt0,bt1,bt2,bt3,bt4;
Dimension d;
String img;
Image im, origin;
File[] images;
cs uf = new cs();
Image curImg;//3
JButton b0, b1, b2, b3, b4;//3
int command;//3
int imgIndex = 0;
int funt;
int funt2=0;
static final int its=0;
static final int Sma=2;
static final int SHOW_NORM = 0;//3
static final int SHOW_HORIZONTAL = 1;//3
static final int SHOW_VERTICAL = 2;// 3
boolean flag=true;
int scale = 0;
public ImageViewer(String s) {
super("ImageViewer");
img=s;
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
dispose();
System.exit(0);
}
});
setLayout(new BorderLayout());
setSize(1200,800); //command = SHOW_NORM;//3
p = new Panel();
p.add(bt0=new JButton("-20%", new ImageIcon("s1.gif")));
p.add(bt1=new JButton("Back", new ImageIcon("s2.gif")));
p.add(bt2=new JButton("File Open", new ImageIcon("s3.gif")));
p.add(bt3=new JButton("Next", new ImageIcon("s4.gif")));
p.add(bt4=new JButton("+20%", new ImageIcon("s5.gif"))); p.add(b1 = new JButton("original",new ImageIcon("s6.gif")));//3
p.add(b2 = new JButton("LeftRight",new ImageIcon("s7.gif")));//3
p.add(b3 = new JButton("UpDown",new ImageIcon("s8.gif")));//3
p.add(b4 = new JButton("EXIT",new ImageIcon("s9.gif")));//5
ScrollPane scrollPane = new ScrollPane();
scrollPane.add(uf);
add(p,BorderLayout.NORTH);
add(scrollPane,BorderLayout.CENTER);
b1.addActionListener(this);//3
b2.addActionListener(this);//3
b3.addActionListener(this);//3
b4.addActionListener(this);//5
bt0.addActionListener(this);
bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt4.addActionListener(this);
funt=its;
setVisible(true);
}
//3
public void reDraw(int command) {
this.command = command;
repaint();
}
public void paint(Graphics g) {
if (curImg == null)
return;
d = p.getSize();
int w = curImg.getWidth(this);
int h = curImg.getHeight(this);
switch (command) {
case SHOW_NORM:
g.drawImage(curImg, 5, d.height + 5, this);
setSize(curImg.getWidth(this),curImg.getHeight(this));
setSize(w,h);
break;
case SHOW_HORIZONTAL:
g.drawImage(curImg, 0, 0, d.width, d.height+h, w, 0, 0, h,
this);
setSize(w,h);
break;
case SHOW_VERTICAL:
g.drawImage(curImg, 0, 0, d.width, d.height+h, w, h, 0, 0,
this);
setSize(w,h);
break;
}
}
//3
public void actionPerformed(ActionEvent evt){
JButton ac = (JButton)evt.getSource();
String com = evt.getActionCommand();
//Button b = (Button) evt.getSource();
//if (evt.getSource() == bt2) { // File Open Button
//openImage();
// return;
// } else
if(ac.getLabel().equals("original")) {
command = SHOW_NORM;
} else if (ac.getLabel().equals("LeftRight")) {
command = SHOW_HORIZONTAL;
} else if (ac.getLabel().equals("UpDown")) {
command = SHOW_VERTICAL;
}
reDraw(command);
if(com.equals("-20%")){
if(scale>-4)
scale--;
int h = (int)(origin.getHeight(this)*(1+0.2*scale));
int w = (int)(origin.getWidth(this)*(1+0.2*scale));
im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
flag = false;
}
if(com.equals("+20%")){
scale++;
int h = (int)(origin.getHeight(this)*(1+0.2*scale));
int w = (int)(origin.getWidth(this)*(1+0.2*scale));
im = im.getScaledInstance(w, h, Image.SCALE_DEFAULT);
flag = false;
}
if(ac.getLabel().equals("File Open")) {
FileDialog opens = new FileDialog(this, "open", FileDialog.LOAD);
opens.show();
img = opens.getDirectory() + opens.getFile();
images = getAllImageFile(opens.getDirectory());
for(int i=0; i<images.length; i++) {
if(images[i].getPath().equals(img)) {
imgIndex = i;
}
}
flag = true;
scale = 0;
}
if(ac.getLabel().equals("Back")){
if(imgIndex > 0) {
img = images[--imgIndex].getPath();
}
flag = true;
scale = 0;
}
if(ac.getLabel().equals("Next")){
if(imgIndex < images.length-1) {
img = images[++imgIndex].getPath();
}
flag = true;
scale = 0;
}
setTitle(img);
uf.repaint();
}
private File[] getAllImageFile(String dir) {
return new File(dir).listFiles(this);
}
public boolean accept(File name) {
String[] extension = {"bmp", "jpg", "gif", "jpeg", "png" , "tiff" };
for(int i=0; i<extension.length; i++) {
if(name.getName().endsWith("." + extension[i])) {
return true;
}
}
return false;
}
public static void main(String[] args) {
ImageViewer Img = new ImageViewer("");
}
//5
/*
class CopyListener implements java.awt.event.ActionListener{
public void actionPerformed(ActionEvent e){
JFileChooser saveFile=new JFileChooser();
int result=saveFile.showSaveDialog(frame);
String savePath=saveFile.getSelectedFile().getAbsolutePath();
if(result==JFileChooser.APPROVE_OPTION){
new imgVisible().PicCopy(FileChooser.filePath, savePath);
}else{
}
}
}
//5
*/
class cs extends Canvas {
cs() {} public void paint(Graphics g) {
if(flag) {
im = Toolkit.getDefaultToolkit().getImage(img);
origin = Toolkit.getDefaultToolkit().getImage(img);
}
//d = p.getSize();
if(funt == its) {
g.drawImage(im, 0, 0, this);
}
}
}
}这样的一小段代码看了很长时间。请前辈赐教。谢谢。
有问题就请留在这里。
Email: [email protected]不胜感激。
前面的前个后个图片文件的浏览。放大和缩小。都比较容易。可是后面的水平翻转和左右翻转按钮点击后,没有事件响应。请前辈指点!完整代码如下:IDE:Eclipse import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;import java.awt.image.*;//
import javax.swing.JOptionPane;//
import java.io.File;
//205217571226yu
public class ImageViewer extends Frame implements ActionListener, FileFilter {
private static JFrame frame=new JFrame("ImageViewer");
Panel p,view;
JButton bt0,bt1,bt2,bt3,bt4;
Dimension d;
String img;
Image im, origin;
File[] images;
cs uf = new cs();
Image curImg;//3
JButton b0, b1, b2, b3, b4;//3
int command;//3
int imgIndex = 0;
int funt;
int funt2=0;
static final int its=0;
static final int Sma=2;
static final int SHOW_NORM = 0;//3
static final int SHOW_HORIZONTAL = 1;//3
static final int SHOW_VERTICAL = 2;// 3
boolean flag=true;
int scale = 0;
public ImageViewer(String s) {
super("ImageViewer");
img=s;
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
dispose();
System.exit(0);
}
});
setLayout(new BorderLayout());
setSize(1200,800); //command = SHOW_NORM;//3
p = new Panel();
p.add(bt0=new JButton("-20%", new ImageIcon("s1.gif")));
p.add(bt1=new JButton("Back", new ImageIcon("s2.gif")));
p.add(bt2=new JButton("File Open", new ImageIcon("s3.gif")));
p.add(bt3=new JButton("Next", new ImageIcon("s4.gif")));
p.add(bt4=new JButton("+20%", new ImageIcon("s5.gif"))); p.add(b1 = new JButton("original",new ImageIcon("s6.gif")));//3
p.add(b2 = new JButton("LeftRight",new ImageIcon("s7.gif")));//3
p.add(b3 = new JButton("UpDown",new ImageIcon("s8.gif")));//3
p.add(b4 = new JButton("EXIT",new ImageIcon("s9.gif")));//5
ScrollPane scrollPane = new ScrollPane();
scrollPane.add(uf);
add(p,BorderLayout.NORTH);
add(scrollPane,BorderLayout.CENTER);
b1.addActionListener(this);//3
b2.addActionListener(this);//3
b3.addActionListener(this);//3
b4.addActionListener(this);//5
bt0.addActionListener(this);
bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt4.addActionListener(this);
funt=its;
setVisible(true);
}
//3
public void reDraw(int command) {
this.command = command;
repaint();
}
public void paint(Graphics g) {
if (curImg == null)
return;
d = p.getSize();
int w = curImg.getWidth(this);
int h = curImg.getHeight(this);
switch (command) {
case SHOW_NORM:
g.drawImage(curImg, 5, d.height + 5, this);
setSize(curImg.getWidth(this),curImg.getHeight(this));
setSize(w,h);
break;
case SHOW_HORIZONTAL:
g.drawImage(curImg, 0, 0, d.width, d.height+h, w, 0, 0, h,
this);
setSize(w,h);
break;
case SHOW_VERTICAL:
g.drawImage(curImg, 0, 0, d.width, d.height+h, w, h, 0, 0,
this);
setSize(w,h);
break;
}
}
//3
public void actionPerformed(ActionEvent evt){
JButton ac = (JButton)evt.getSource();
String com = evt.getActionCommand();
//Button b = (Button) evt.getSource();
//if (evt.getSource() == bt2) { // File Open Button
//openImage();
// return;
// } else
if(ac.getLabel().equals("original")) {
command = SHOW_NORM;
} else if (ac.getLabel().equals("LeftRight")) {
command = SHOW_HORIZONTAL;
} else if (ac.getLabel().equals("UpDown")) {
command = SHOW_VERTICAL;
}
reDraw(command);
if(com.equals("-20%")){
if(scale>-4)
scale--;
int h = (int)(origin.getHeight(this)*(1+0.2*scale));
int w = (int)(origin.getWidth(this)*(1+0.2*scale));
im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
flag = false;
}
if(com.equals("+20%")){
scale++;
int h = (int)(origin.getHeight(this)*(1+0.2*scale));
int w = (int)(origin.getWidth(this)*(1+0.2*scale));
im = im.getScaledInstance(w, h, Image.SCALE_DEFAULT);
flag = false;
}
if(ac.getLabel().equals("File Open")) {
FileDialog opens = new FileDialog(this, "open", FileDialog.LOAD);
opens.show();
img = opens.getDirectory() + opens.getFile();
images = getAllImageFile(opens.getDirectory());
for(int i=0; i<images.length; i++) {
if(images[i].getPath().equals(img)) {
imgIndex = i;
}
}
flag = true;
scale = 0;
}
if(ac.getLabel().equals("Back")){
if(imgIndex > 0) {
img = images[--imgIndex].getPath();
}
flag = true;
scale = 0;
}
if(ac.getLabel().equals("Next")){
if(imgIndex < images.length-1) {
img = images[++imgIndex].getPath();
}
flag = true;
scale = 0;
}
setTitle(img);
uf.repaint();
}
private File[] getAllImageFile(String dir) {
return new File(dir).listFiles(this);
}
public boolean accept(File name) {
String[] extension = {"bmp", "jpg", "gif", "jpeg", "png" , "tiff" };
for(int i=0; i<extension.length; i++) {
if(name.getName().endsWith("." + extension[i])) {
return true;
}
}
return false;
}
public static void main(String[] args) {
ImageViewer Img = new ImageViewer("");
}
//5
/*
class CopyListener implements java.awt.event.ActionListener{
public void actionPerformed(ActionEvent e){
JFileChooser saveFile=new JFileChooser();
int result=saveFile.showSaveDialog(frame);
String savePath=saveFile.getSelectedFile().getAbsolutePath();
if(result==JFileChooser.APPROVE_OPTION){
new imgVisible().PicCopy(FileChooser.filePath, savePath);
}else{
}
}
}
//5
*/
class cs extends Canvas {
cs() {} public void paint(Graphics g) {
if(flag) {
im = Toolkit.getDefaultToolkit().getImage(img);
origin = Toolkit.getDefaultToolkit().getImage(img);
}
//d = p.getSize();
if(funt == its) {
g.drawImage(im, 0, 0, this);
}
}
}
}这样的一小段代码看了很长时间。请前辈赐教。谢谢。
有问题就请留在这里。
Email: [email protected]不胜感激。
String com = evt.getActionCommand();
// Button b = (Button) evt.getSource();
// if (evt.getSource() == bt2) { // File Open Button
// openImage();
// return;
// } else
if (ac.getLabel().equals("original")) {
command = SHOW_NORM;
} else if (ac.getLabel().equals("LeftRight")) {
command = SHOW_HORIZONTAL;
} else if (ac.getLabel().equals("UpDown")) {
command = SHOW_VERTICAL;
}
reDraw(command); if (com.equals("-20%")) {
if (scale > -4)
scale--;
int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
flag = false;
}
if (com.equals("+20%")) {
scale++;
int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
im = im.getScaledInstance(w, h, Image.SCALE_DEFAULT);
flag = false;
}
if (ac.getLabel().equals("File Open")) {
FileDialog opens = new FileDialog(this, "open", FileDialog.LOAD);
opens.show();
img = opens.getDirectory() + opens.getFile();
images = getAllImageFile(opens.getDirectory());
for (int i = 0; i < images.length; i++) {
if (images[i].getPath().equals(img)) {
imgIndex = i;
}
}
flag = true;
scale = 0;
}
if (ac.getLabel().equals("Back")) {
if (imgIndex > 0) {
img = images[--imgIndex].getPath();
}
flag = true;
scale = 0;
} if (ac.getLabel().equals("Next")) {
if (imgIndex < images.length - 1) {
img = images[++imgIndex].getPath();
}
flag = true;
scale = 0;
}
setTitle(img);
uf.repaint();
} 很明显你的事件响应最终只到 Next上.. 你自己都没写事件相应的方法. 你还在这问 为什么不响应..真是怀疑这代码是不是你写的.
好 . 那就推论到你不知道该怎么写. 左右转我想到的办法是 把每一个点的像素值拿到..做矩阵变换. 可能比较笨...不排除有更好的..
int w = curImg.getWidth(this);
int h = curImg.getHeight(this);
switch (command) {
case SHOW_NORM:
g.drawImage(curImg, 5, d.height + 5, this);
setSize(curImg.getWidth(this),curImg.getHeight(this));
setSize(w,h);
break;
case SHOW_HORIZONTAL:
g.drawImage(curImg, 0, 0, d.width, d.height+h, w, 0, 0, h,
this);
setSize(w,h);
break;
case SHOW_VERTICAL:
g.drawImage(curImg, 0, 0, d.width, d.height+h, w, h, 0, 0,
this);
setSize(w,h);
break;
主要是
JButton ac = (JButton)evt.getSource();
引用有问题。
可能的问题在这里。
if (curImg == null)
return;在paint方面里面,第一句就是判断curImg是否为空
可是你把整个代码看看,哪里给curImg赋过值?
这个方法始终被调用,但始终在第1句就返回了。后面的懒得看了,这些代码如果是楼主抄的,我建议楼主还是把它丢到垃圾桶去好了。
package csdn.graphics;import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.io.*;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;import java.awt.image.*;//
import java.io.File;//205217571226yu
public class ImageViewer extends Frame implements ActionListener {
private static JFrame frame = new JFrame("ImageViewer");
Panel p, view;
JButton bt0, bt1, bt2, bt3, bt4;
Dimension d;
String img;
Image im, origin;
File[] images;
cs uf = new cs(); Image curImg;// 3
JButton b0, b1, b2, b3, b4;// 3
int command;// 3 int imgIndex = 0;
int funt;
int funt2 = 0; static final int its = 0;
static final int Sma = 2; static final int SHOW_NORM = 0;// 3
static final int SHOW_HORIZONTAL = 1;// 3
static final int SHOW_VERTICAL = 2;// 3 boolean flag = true;
int scale = 0; public ImageViewer(String s) {
super("ImageViewer");
img = s; addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
dispose();
System.exit(0);
}
}); setLayout(new BorderLayout());
setSize(1200, 800); // command = SHOW_NORM;//3 p = new Panel();
p.add(bt0 = new JButton("-20%", new ImageIcon("s1.gif")));
p.add(bt1 = new JButton("Back", new ImageIcon("s2.gif")));
p.add(bt2 = new JButton("File Open", new ImageIcon("s3.gif")));
p.add(bt3 = new JButton("Next", new ImageIcon("s4.gif")));
p.add(bt4 = new JButton("+20%", new ImageIcon("s5.gif"))); p.add(b1 = new JButton("original", new ImageIcon("s6.gif")));// 3
p.add(b2 = new JButton("LeftRight", new ImageIcon("s7.gif")));// 3
p.add(b3 = new JButton("UpDown", new ImageIcon("s8.gif")));// 3
p.add(b4 = new JButton("EXIT", new ImageIcon("s9.gif")));// 5 ScrollPane scrollPane = new ScrollPane();
scrollPane.add(uf); add(p, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER); b1.addActionListener(this);// 3
b2.addActionListener(this);// 3
b3.addActionListener(this);// 3
b4.addActionListener(this);// 5 bt0.addActionListener(this);
bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt4.addActionListener(this); d = p.getSize();
funt = its;
setVisible(true);
} private void zoomOut() {
if (scale > -4) {
scale--;
int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
uf.repaint();
}
} private void zoomIn() {
if (scale < 4) {
scale++;
int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
uf.repaint();
}
} private void openPic() {
origin = Toolkit.getDefaultToolkit().getImage(img);
im = Toolkit.getDefaultToolkit().getImage(img);
setTitle(img);
scale = 0;
uf.repaint();
} private void fileOpen() {
FileDialog opens = new FileDialog(this, "open", FileDialog.LOAD);
opens.setVisible(true);
img = opens.getDirectory() + opens.getFile();
if (img == null)
return;
File file = new File(img);
if (!file.isFile())
return; images = getAllImageFile(opens.getDirectory());
imgIndex = -1;
for (int i = 0; i < images.length; i++) {
if (images[i].getPath().equals(img)) {
imgIndex = i;
}
}
if (imgIndex < 0)
return; openPic();
} private void previous() {
if (imgIndex > 0) {
img = images[--imgIndex].getPath();
openPic();
}
} private void next() {
if (imgIndex < images.length - 1) {
img = images[++imgIndex].getPath();
openPic();
}
} private void original() {
if (img != null) {
openPic();
}
} private void leftRight() {
Graphics g=uf.getGraphics();
Graphics2D g2d=(Graphics2D)g;
g2d.clearRect(0, 0, uf.getWidth(), uf.getHeight());
AffineTransform origXform = g2d.getTransform();
AffineTransform newXform = (AffineTransform) (origXform.clone());
int yRot = im.getHeight(uf);
int xRot = im.getWidth(uf);
newXform.rotate(Math.toRadians(90), xRot, yRot);
//inc+=10;
g2d.setTransform(newXform);
int x = (im.getWidth(uf));
int y = (im.getHeight(uf));
g2d.drawImage(im, y, x, uf);
//inc2+=10;
g2d.setTransform(origXform);
} private void upDown() {
Graphics g=uf.getGraphics();
Graphics2D g2d=(Graphics2D)g;
g2d.clearRect(0, 0, uf.getWidth(), uf.getHeight());
AffineTransform origXform = g2d.getTransform();
AffineTransform newXform = (AffineTransform) (origXform.clone());
int yRot = im.getHeight(uf);
int xRot = im.getWidth(uf);
newXform.rotate(Math.toRadians(-90), xRot, yRot);
//inc+=10;
g2d.setTransform(newXform);
int x = (im.getWidth(uf));
int y = (im.getHeight(uf));
g2d.drawImage(im, y, x, uf);
//inc2+=10;
g2d.setTransform(origXform);
} public void actionPerformed(ActionEvent evt) {
JButton ac = (JButton) evt.getSource();
// get command string
String com = evt.getActionCommand(); if (com.equals("-20%")) {
zoomOut();
} else if (com.equals("+20%")) {
zoomIn();
} else if (com.equals("File Open")) {
fileOpen();
} else if (com.equals("Back")) {
previous();
} else if (com.equals("Next")) {
next();
} else if (com.equals("original")) {
original();
} else if (com.equals("LeftRight")) {
leftRight();
} else if (com.equals("UpDown")) {
upDown();
}
} private File[] getAllImageFile(String dir) {
return new File(dir).listFiles(new FileFilter() {
public boolean accept(File name) {
String[] extension = { "bmp", "jpg", "gif", "jpeg", "png",
"tiff" };
for (int i = 0; i < extension.length; i++) {
if (name.getName().endsWith("." + extension[i])) {
return true;
}
}
return false;
}
});
} public static void main(String[] args) {
ImageViewer Img = new ImageViewer("");
}
class cs extends Canvas {
cs() {
} public void paint(Graphics g) {
g.drawImage(im, 0, 0, this);
} }
}