Java JOptionPane, шагая через массив - PullRequest
0 голосов
/ 24 января 2011

Я знаю, что решение заключается в использовании цикла for для перехода по массиву и отображения на панели.Однако я не нахожу прямого объяснения этому.Мне нужна следующая и предыдущая кнопки, которые отображают каждый элемент массива и просто возвращаются к первому элементу, как только он достигает конца, когда нажимается следующая кнопка.

for ( int i = 0; i < initem.length; i++ ){
          JOptionPane.showMessageDialog( null, initem[i]);
}

initem - это имя моего массива.

Объединенный ActionListerner

class RecordViewer extends JDialog
{
private JButton next;
private JButton prev;
private JLabel label = new JLabel();
private int current = 0;
private CDinventoryItem [] items;



 public RecordViewer(CDinventoryItem [] array){

super();
items = array;

label = this.setLabel(items[Current()]);
next = new JButton("Next");
next.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        if( getCurrent() == items.length ){
                setCurrent(0);
        }else{
                setCurrent(getCurrent() + 1);
        }
            setTitle("Inventory Item");
            setSize(1200, 300);
            setLocation(200,200);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            getLabel().setText(items[getCurrent()].toString());
    }
});

prev = new JButton("Previous");
prev.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        if( getCurrent() == 0){
                setCurrent(items.length - 1);
        }else{
                setCurrent(getCurrent() - 1);
        }
            setTitle("Inventory Item");
            setSize(1200, 300);
            setLocation(200,200);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            getLabel().setText(items[getCurrent()].toString());
    }
});

setLayout(new FlowLayout());
add(label);
add(next);
add(prev);
pack();

this.setVisible(true);
}

public JButton getNext() {
    return next;
}

public void setNext(JButton next) {
    this.next = next;
}

public JButton getPrev() {
    return prev;
}

public void setPrev(JButton prev) {
    this.prev = prev;
}

public JLabel getLabel() {
    return label;
}


private int getCurrent() {
    return current;
}

public void setCurrent(int current) {
    this.current = current;
}

private JLabel setLabel(CDinventoryItem cDinventoryItem) {
    return label;
}

private int Current() {
    return current;

}}

Ответы [ 2 ]

1 голос
/ 24 января 2011

Вот простой пример, который пропускает все посторонние детали.

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;

public class RecordViewer extends JDialog {

 String items[] = {"One", "Two", "Three"};
 JButton next, prev;
 JLabel label;
 int current;

public RecordViewer(){
    super();
    current = 0;
    label = new JLabel(items[current]);
    next = new JButton("Next");
    next.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(current == items.length - 1){
                current = 0;
            }else{
                current++;
            }
            label.setText(items[current]);
        }
    });

    prev = new JButton("Previous");
    prev.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(current == 0){
                current = items.length - 1;
            }else{
                current--;
            }
            label.setText(items[current]);
        }
    });

    setLayout(new FlowLayout());
    add(label);
    add(next);
    add(prev);
    pack();
    this.setVisible(true);
  }
 }

Для просмотра этого диалогового окна вы можете вызвать:

  new RecordViewer();

В этом примере используется простой массив String ипросто циклически перебирает массив, используя две кнопки и простую компоновку.Вы можете изменить его для отображения массива и использовать более сложный макет, чтобы он выглядел лучше.


ОБНОВЛЕНИЕ:

Вы можете попробовать это:

 public class RecordViewer extends JDialog {

  JButton next, prev;
  JLabel label;
  int current;
  CDinventoryItem [] items;

  public RecordViewer(CDinventoryItem [] array)
  {
    super(); 
    current = 0; 
    items = array;
    ....

И посмотри, поможет ли это.

1 голос
/ 24 января 2011

Ваш цикл будет отображать панель один раз для каждого элемента в массиве, и это не то, что вы хотите.

Звучит так, будто вы пытаетесь получить выбранное значение. В этом случае используйте inputDialog вместо сообщения Dialog и передайте весь массив.

Вот пример из API:

Object selectedValue = JOptionPane.showInputDialog(null,
"Choose one", "Input",
JOptionPane.INFORMATION_MESSAGE, null,
possibleValues, possibleValues[0]);
...