Как создать прокручиваемый JList для добавления деталей, полученных из JOptionPane - PullRequest
1 голос
/ 08 июля 2010

Я хочу многократно принимать ввод от пользователя (возможно, с помощью кнопки) через JOptionPane (уже сделано) и сохранять детали во что-то (как насчет массива динамических объектов) и отображать эту информацию в виде списка в прокручиваемом JList .


МОЙ КОД


import java.awt.GridLayout;
import javax.swing.*;

class Flight {



public static void main(String[] args) {

    //Panel
    JPanel panel = new JPanel(new GridLayout(7, 2,20, 20));

    //Add textfields here
    JTextField txtflightno = new JTextField(8);
    JTextField txtmechanicalstatus = new JTextField(8);
    JTextField txtmedicalstatus = new JTextField(8);
    JTextField txtfuellevel = new JTextField(8);
    JTextField txtweathercondition = new JTextField(8);
    JTextField txtfrequency = new JTextField(8);
    JTextField txtflightpath = new JTextField(8);






    //Add labels here
    JLabel lblflightno = new JLabel("Flight No : ");
    JLabel lblmechanicalstatus = new JLabel("Mechanical Status:");
    JLabel lblmedicalstatus = new JLabel("Medical Status:");
    JLabel lblfuellevel = new JLabel("Fuel Level:");
    JLabel lblweathercondition = new JLabel("Weather Condition:");
    JLabel lblfrequency = new JLabel("Frequency:");
    JLabel lblflightpath = new JLabel("Flight Path:");





    //Adding flightno to panel
    panel.add(lblflightno);
    panel.add(txtflightno);

    //Adding mechanicalstatus to the panel
    panel.add(lblmechanicalstatus);
    panel.add(txtmechanicalstatus);

    //Adding medicalstatus to the panel
    panel.add(lblmedicalstatus);
    panel.add(txtmedicalstatus);

    //Adding fuellevel to the panel
    panel.add(lblfuellevel);
    panel.add(txtfuellevel);

    //Adding weathercondition to the panel
    panel.add(lblweathercondition);
    panel.add(txtweathercondition);

    //Adding frequency to the panel
    panel.add(lblfrequency);
    panel.add(txtfrequency);

    //Adding flightpath to the panel
    panel.add(lblflightpath);
    panel.add(txtflightpath);


    panel.setBounds(0, 0, 800, 600);




   int result = JOptionPane.showConfirmDialog(null, panel, "Flight Details",
        JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    if (result == JOptionPane.OK_OPTION) {

    }
}
}

Как я должен хранить детали самолета? Как мне реализовать прокручиваемый JList? Любые предложения.

Большое спасибо

Ответы [ 3 ]

6 голосов
/ 08 июля 2010

Как обсуждено в Как использовать списки , JList использует модель списка в качестве источника отображаемых данных. Просто добавьте свои данные в DefaultListModel и используйте его для построения списка.

DefaultListModel dlm = new DefaultListModel();
// add data
JList list = new JList(dlm);
panel.add(new JScrollPane(list));
4 голосов
/ 08 июля 2010

Чтобы сделать прокручиваемый JList, просто вставьте его в JScrollPane .Вместо

add(myList, constraints);

do

add(new JScrollPane(myList), constraints);

Чтобы расширить список, просто получите ListModel JList (используя getListModel) и используйте add для добавления объектов.

Подробнее об использовании ListModels в учебнике Sun .

Подробнее о ScrollPane в учебнике тоже.

0 голосов
/ 08 июля 2010

Вы должны использовать ActionListener кнопки, которые вы пропустили в фрагменте кода.

В опции OK:

JList jlist = ...;

jlist.add(txtflightno.getText());
jlist.add(txtmechanicalstatus.getText());
jlist.add(txtmedicalstatus.getText());
....
....

& 

add(new JScrollPanel(myList), constraints);

После этого используйте метод validateКомпонента, чтобы обновить список с этим новым элементом.Но одну вещь, которую вы должны помнить, это то, что список отображает каждый элемент построчно.Я предлагаю вам использовать JTable , с помощью которого вы сможете отображать свои вещи осмысленно ...

...