-1
import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.IOException;
public class PictureViewer {
final static int MIN_NUMBER = 1;
final static int MAX_NUMBER = 8;
static int image_number = 1;
static String filename;
public static void main(String[] args) {
showMenu();
}
public static int forward(int current_number) {
if (current_number < MAX_NUMBER) {
current_number++;
} else {
current_number = MAX_NUMBER;
}
return current_number;
}
public static int backward(int current_number) {
if (current_number > MIN_NUMBER) {
current_number--;
}
return current_number;
}
public static String createFileName(int current_number) {
return ("Picture " + current_number + ".jpg");
}
public static String createRandomName() {
return ("Picture " + (int) (Math.random() * 8 + 1) + ".jpg");
}
public static void showMenu() {
PictureViewer theobject = new PictureViewer();
int current_number = 0;
Scanner input = new Scanner(System.in);
while (true) {
System.out.println("Choose static forward(1), static backward(2), createFileName(3), createRandomName(4)");
int user = input.nextInt();
switch (user) {
case 1:
System.out.println("static forward");
current_number = forward(current_number);
theobject.forward();
break;
case 2:
System.out.println("static backward");
current_number = backward(current_number);
theobject.backward();
break;
case 3:
System.out.println("createFileName");
filename = createFileName(current_number);
theobject.showWindow(createFileName(current_number));
break;
case 4:
System.out.println("createRandomName");
filename = createRandomName();
theobject.showWindow(createRandomName());
}
if (image_number != 1);
System.out.println(image_number);
}
}
public void forward() {
if (image_number < MAX_NUMBER) {
image_number++;
} else {
image_number = MAX_NUMBER;
}
}
public void backward() {
if (image_number > MIN_NUMBER) {
image_number--;
}
}
public void showWindow(String filename) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JLabel jlblName = new JLabel();
jlblName = theobject.load_picture(filename);
panel.add(jlblName);
frame.setTitle(filename);
frame.setSize(450, 100);
frame.setLocation(200, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public JLabel load_picture(String imagefile) {
JLabel templabel = null;
String startURL = "";
if (!imagefile.startsWith("http")) {
startURL = "http://riveira.x10host.com/images/";
}
URL myURL = null;
try {
myURL = new URL(startURL + imagefile);
BufferedImage myPicture = ImageIO.read(myURL);
templabel = new JLabel(new ImageIcon(myPicture));
} catch (Exception e) {
System.out.println("Error caught " + e.toString());
}
return templabel;
}
}
在我的ShowWindow方法,我收到,指出對象無法找到錯誤。我在showMenu方法中定義了該對象。我卡住了,我不知道該怎麼做。我在我的代碼接收找不到符號錯誤
什麼我應該做的事:
這個程序將圖像加載到內存中,non-static
需要 的對象。它期望傳遞給它的圖像文件名稱的名稱,並返回一個JLabel
與圖像。它會假設一個互聯網連接如可用和AFTER程序對象已經創造了它只能被稱爲,它會返回一個JLabel
類型變量,這樣稱呼它:
thelabel = object.load_picture("picture1.jpg");
(hard code 'picture1.jpg' only when testing - USE a method or // variable for 'real' call).
此代碼需要你做an:
import java.awt.*
import java.net.*
注意:此方法使用參數和返回類型作爲輸入/輸出。
試試'jlblName = this.load_picture(filename);' – pikand
你有太多的靜態方法。重新設計。使他們成爲普通的方法,並使該對象成爲一個班級領域。就像現在一樣,它被聲明爲一個靜態方法的本地,並在另一個靜態方法和常規方法中使用 - 這將永遠不會工作。 – laune