2015-10-22 92 views
-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.* 

注意:此方法使用參數和返回類型作爲輸入/輸出。

+0

試試'jlblName = this.load_picture(filename);' – pikand

+1

你有太多的靜態方法。重新設計。使他們成爲普通的方法,並使該對象成爲一個班級領域。就像現在一樣,它被聲明爲一個靜態方法的本地,並在另一個靜態方法和常規方法中使用 - 這將永遠不會工作。 – laune

回答

0

theobject是showMenu中的局部變量。它只會在這種方法中可見。

這就是爲什麼你不在showWindow中看到它。你可以在你的課堂上成爲一個領域。