2014-11-05 3 views
0

Как получить java-апплет для поиска изображения по указанному пути. Я хочу сделать простой апплет imageviewer, который имеет 2 кнопки NEXT, PREV. Нажимая «Далее», он должен показывать следующее изображение и, нажимая «prev», должен показать предыдущее изображение. Я написал следующий код. Пожалуйста, помогите мне написать код для функций updatenext() и updateprev().Как обновить изображение в апплете

public class pic extends Applet implements ActionListener 
{ 
    Button prev,next; 
    private static final String PREV="Previous"; 
    private static final String NEXT="Next"; 
    Image img; 

    public void init() 
    { 
    img=getImage(getCodeBase(),"image1.jpg"); 
    prev = new Button(); 
    prev.setLabel(PREV); 
    prev.setActionCommand(PREV); 
    prev.addActionListener(this); 
    add(prev); 
    next = new Button(); 
    next.setLabel(NEXT); 
    next.setActionCommand(NEXT); 
    next.addActionListener(this); 
    add(next); 
    } 

    public void paint(Graphics g) 
    { 
    g.drawImage(img,0,0,600,700,this); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
    if(e.getActionCommand().equals(NEXT)) 
    updatenext(); 

    else if(e.getActionCommand().equals(PREV)) 
    updateprev(); 
    } 

    void updatenext() 
    { 
    //updateImagehere 
    } 

    void updateprev() 
    { 
    //updateimage here 
    repaint(); 
    } 
} 
+0

Как обновить переменную IMG? – ASD

+0

перейдите к простым учебникам, доступным в google – Krishna

+0

1) Зачем нужен апплет? Если это связано с тем, что учитель указал на это, обратитесь к [Почему учителя CS должны ** останавливаться ** преподавать Java-апплеты] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop-учебно-ява-апплеты /). 2) Зачем использовать AWT? См. [Этот ответ] (http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978) по многим причинам, чтобы отказаться от использования AWT с использованием компонентов в пользу Swing. –

ответ

0

Очень простой пример.

import java.applet.*; 
import java.awt.*; 

public class AppletImage extends Applet{ 
    Image img; 
    MediaTracker tr; 
    public void paint(Graphics g) { 
     tr = new MediaTracker(this); 
     img = getImage(getCodeBase(), "demoimg.gif"); 
     tr.addImage(img,0); 
     g.drawImage(img, 0, 0, this); 
    } 
public static void main(String args[]){ 
    AppletImage appletImage = new AppletImage(); 
    appletImage.setVisible(true); 

} 

} 

попробуйте это, и я смогу взять изображение в соответствии с вашим.

+0

Как получить апплет для поиска следующего изображения в каталоге? – ASD

+0

просто поместите контроль над меткой и добавьте событие click, и в соответствии с этим измените imaage панели. У вас используется Swing? – Krishna

+0

Нет, я был уверен в Swing. Я все еще сомневаюсь, но как бы получить доступ к названию изображений в моем prg.? например. моя папка содержит bike.jpg, car, jpg и т. д., как я смогу сначала отобразить bike.jpg, а при следующем нажатии он должен отобразить car.jpg. – ASD

-1

Если вы хотите, чтобы получить список файлов в месте вашего апплета вы можете создать File объект текущего каталога с:

File currentDir = new File(getCodeBase().getPath()); 

Затем перебирать файлы называют:

for (File file : currentDir.listFiles()) { 
    // do something with the file 
} 

Вам нужно будет отфильтровать каталоги и файлы без изображений, я бы предложил вам использовать FileNameFilter в качестве аргумента при вызове listFiles().

EDIT:

Вот пример решения, которое вы могли бы использовать этот метод:

public class pic extends Applet implements ActionListener 
{ 
Button prev, next; 
private static final String PREV = "Previous"; 
private static final String NEXT = "Next"; 
Image img; 
private File[] imageFiles; 
private int currentIndex = 0; 

public void init() 
{ 
    File baseDir = new File(getCodeBase().getPath()); 
    imageFiles = baseDir.listFiles(new FilenameFilter() { 
     @Override 
     public boolean accept(File dir, String name) { 
      String image = ".*\\.(png|jpg|jpeg|gif)"; 
      Pattern pattern = Pattern.compile(image); 
      Matcher matcher = pattern.matcher(name.toLowerCase()); 
      return matcher.matches(); 
     } 
    }); 
    setImage(); 
    prev = new Button(); 
    prev.setLabel(PREV); 
    prev.setActionCommand(PREV); 
    prev.addActionListener(this); 
    add(prev); 

    next = new Button(); 
    next.setLabel(NEXT); 
    next.setActionCommand(NEXT); 
    next.addActionListener(this); 
    add(next); 
} 

public void paint(Graphics g) 
{ 
    g.drawImage(img, 0, 0, 600, 700, this); 
} 

public void actionPerformed(ActionEvent e) 
{ 
    if (e.getActionCommand().equals(NEXT)) 
     updatenext(); 
    else if (e.getActionCommand().equals(PREV)) 
     updateprev(); 
} 

private void setImage() { 
    img = getImage(getCodeBase(), imageFiles[currentIndex].getName()); 
} 

void updatenext() 
{ 
    // needs circular increment 
    if (currentIndex == imageFiles.length - 1) { 
     currentIndex = 0; 
    } else { 
     currentIndex++; 
    } 
    setImage(); 
    repaint(); 
} 

void updateprev() 
{ 
    // needs circular decrement 
    if (currentIndex == 0) { 
     currentIndex = imageFiles.length-1; 
    } else { 
     currentIndex--; 
    } 
    setImage(); 
    repaint(); 
} 

}

+0

Почему конечный пользователь хочет использовать апплет в сети для отображения изображений со своих жестких дисков? Вы понимаете, что любые операции с файлами, выполняемые апплетом, напрямую связаны с файлами на компьютере пользователя? Мы не можем получить «список файлов» с сервера таким образом. –

+0

Вопрос не упоминает об этом. – fr1eza

Смежные вопросы