Jaki język wybrać do napisania programu wykorzystującego listę?

0

Witajcie!
Muszę napisać aplikację, w której po wpisaniu do okienka pewnego parametru - przyjmijmy, że jest to liczba 780 - w okienku poniżej ukaże się lista wyboru opcji . Ta lista musi się zmieniać właśnie w zależności od tej liczby. Przykładowo, gdy jest wspomniane przeze mnie 780 to w liscie mają byc opcje : a i b - powinno dać się wybrać jedno z nich i w zależności od wybranej opcji uruchomiona zostaje procedura wyliczenia (wybor opcji -> pobranie nazwy opcji badz tez po wybraniu automatyczne uruchomienie wyliczenia innego parametru) innego parametru. Po wpisaniu innej liczby np 800 pojawiaja sie juz np trzy opcje. Czy kojarzycie, w których językach programowania jest to stosunkowo łatwe do ogarnięcia? nie robiłam jeszcze list dynamicznych stąd moje pytanko.
Pozdrawiam

1

Delphi, C++... wszystko, w czym można stworzyć i oprogramować GUI (w przypadku Delphi masz wbudowany edytor okienek, w QtCreatorze do C++ chyba także można projektować okienka).

0

Naprawdę dowolny, jest to całkiem proste zadanie. Możesz np. spróbować C++ Qt. Jeżeli sensownie to sobie rozplanujesz to znaczną część będziesz mogła sobie nawet "wyklikać".

  • Coś długo te posty piszę :/
0

okienko to wiem mniej więcej jak stworzyć. Tylko problem mam z wymyśleniem tej dynamicznej listy wyboru. Ma ktoś może gdzieś implementacje takiego czegoś? Myślałam też o tym, aby napisać to w Javie - czy to dobry pomysł? między innymi ze względu na fakt możliwości wygenerowania sobie jara.

0

A może dodaj te wszystkie okienka które chcesz by potem się pojawiały i ustaw jako niewidoczne. Jak użytkownik wybierze daną pozycję, to odkryj ten co potrzeba żeby był widoczny. To jest taki mało elegancje co prawda ale powinno działac...

0

np. w C WinApi:

HWND hUchwyt = CreateWindowEx(0, "LISTBOX", NULL, WS_CHILD | WS_VISIBLE, 0, 0, 100, 50, hwnd, (HMENU)1, hThisInstance, NULL);
SendMessage(hUchwyt, LB_ADDSTRING, 0, (LPARAM)"odpowiedź A");
SendMessage(hUchwyt, LB_ADDSTRING, 0, (LPARAM)"odpowiedź B");

zmiana odpowiedzi:

 
//usuwanie dwóch poprzednich wariantów
SendMessage(hUchwyt, LB_DELETESTRING, 0, 0);
SendMessage(hUchwyt, LB_DELETESTRING, 0, 0);
//dodanie nowych
SendMessage(hUchwyt, LB_ADDSTRING, 0, (LPARAM)"odpowiedź C");
SendMessage(hUchwyt, LB_ADDSTRING, 0, (LPARAM)"odpowiedź Z");

Aby odczytać liczbę użyć można Edit'a i zwyczajnie tekst zamienić na liczbę:

 
HWND edit = createWindowEx( ... );

//aby pobrac tekst z edita do bufora
int dlugosc = GetWindowTextLength(edit);
char* tekst = (char*) malloc (dlugosc+1);
GetWindowText(edit, tekst, dlugosc+1);
//konwertujemy tekst na liczbe
int liczba = atoi(tekst);
//wyswietlamy odpowiednie warianty względem liczby
switch(liczba)
{
     case 108:
         SendMessage(hUchwyt, LB_DELETESTRING, 0, 0);
         SendMessage(hUchwyt, LB_DELETESTRING, 0, 0);
         SendMessage(hUchwyt, LB_ADDSTRING, 0, (LPARAM)"odpowiedź C");
         SendMessage(hUchwyt, LB_ADDSTRING, 0, (LPARAM)"odpowiedź Z");
         break;
}

Nie wiem czy o to chodziło

2
SendMessage(hUchwyt, LB_ADDSTRING, 0, (LPARAM)"odpowiedź A");

Jest taki bardzo fajny nagłówek <windowsx.h>, a w nim

ListBox_AddString(hUchwyt, "odpowiedź A");

i wiele innych bardzo ciekawych rzeczy ;-)
Można zapomnieć o WPARAM/LPARAM i co ma być w którym, wszędzie wszystkie parametry ponazywane, w WndProc także.

0
amyska napisał(a):

Witajcie!
Muszę napisać aplikację, w której po wpisaniu do okienka pewnego parametru - przyjmijmy, że jest to liczba 780 - w okienku poniżej ukaże się lista wyboru opcji . Ta lista musi się zmieniać właśnie w zależności od tej liczby. Przykładowo, gdy jest wspomniane przeze mnie 780 to w liscie mają byc opcje : a i b - powinno dać się wybrać jedno z nich i w zależności od wybranej opcji uruchomiona zostaje procedura wyliczenia (wybor opcji -> pobranie nazwy opcji badz tez po wybraniu automatyczne uruchomienie wyliczenia innego parametru) innego parametru. Po wpisaniu innej liczby np 800 pojawiaja sie juz np trzy opcje. Czy kojarzycie, w których językach programowania jest to stosunkowo łatwe do ogarnięcia? nie robiłam jeszcze list dynamicznych stąd moje pytanko.
Pozdrawiam

Hej,

Przygotowałem Ci mały programik demo w Javie wykorzystujący JTextField oraz JList. JTextField korzysta z KeyListener'a więc w zależności od tego co w nim wprowadzisz zmieni się również zawartość JList. W tym wypadku zawartością JList będą Twoje opcje. Programik ma zaimplementowane cztery "stany", czyli reaguje na 4 przedziały wprowadzonej wartości w JTextField (null, 0-100, 101-200, >200). Zapewne implementacja nie jest doskonała, ale powinnaś załapać o co chodzi.

Screen:
screen.jpg

Link do pobrania aplikacji demo:
http://wrzucacz.pl/file/2441376492687/JListDemo.jar
http://wrzuca.cz/file/2441376492687/JListDemo.jar

Kod:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JTextField;
import java.awt.GridBagConstraints;
import javax.swing.JList;
import java.awt.Insets;
import javax.swing.JScrollPane;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;


public class JListDemo extends JFrame {

     private JPanel contentPane;
     private JTextField textField;
     private JList listaWyboru;
     private DefaultListModel wyniki;
     private String listaElementow[] = {"Zero", "Jeden", "Dwa", "Trzy", "Cztery", "Pięć", "Sześć", "Siedem", "Osiem", "Dziewięć", "Podaj jakąś wartość", "Podaj inną wartość"};

     public static void main(String[] args) {
          
          EventQueue.invokeLater(new Runnable() {
               
               public void run() {
                    
                    try {
                         
                         JListDemo frame = new JListDemo ();
                         frame.setVisible(true);
                         
                    } catch (Exception e) {
                         
                         e.printStackTrace();
                    }
               }
          });
     }

     public JListDemo () {
          
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setTitle("DemoClass");
          setSize(278, 300);
          setLocationRelativeTo(null);
          
          contentPane = new JPanel();
          contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
          setContentPane(contentPane);
          
          GridBagLayout gbl_contentPane = new GridBagLayout();
          gbl_contentPane.columnWidths = new int[]{219, 0};
          gbl_contentPane.rowHeights = new int[]{0, 0, 0};
          gbl_contentPane.columnWeights = new double[]{1.0, Double.MIN_VALUE};
          gbl_contentPane.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
          contentPane.setLayout(gbl_contentPane);
          
          textField = new JTextField();
          textField.addKeyListener(new KeyAdapter() {
               
               @Override
               public void keyReleased(KeyEvent arg0) {
                    
                    try {
                    
                         String textStr = textField.getText();
                         int textInt = Integer.parseInt(textStr);
                         
                         if (textInt >= 0 && textInt < 100) {
                                   
                              wyniki.removeAllElements();
                                   
                              for (int i = 0; i < 3; i++) 
                                        wyniki.addElement(listaElementow[i]);
                                   
                         } else if (textInt >= 100 && textInt <= 200) {
                                   
                              wyniki.removeAllElements();
                                   
                              for (int i = 3; i < 10; i++)
                                        wyniki.addElement(listaElementow[i]);
                                   
                         } else {
                                   
                              wyniki.removeAllElements();
                              wyniki.addElement(listaElementow[11]);
                         }     
                          
                         listaWyboru.repaint();
                         
                    } catch (NumberFormatException e) {
                         
                         wyniki.removeAllElements();
                         wyniki.addElement(listaElementow[10]);
                    }
               }
          });
          GridBagConstraints gbc_textField = new GridBagConstraints();
          gbc_textField.insets = new Insets(0, 0, 5, 0);
          gbc_textField.fill = GridBagConstraints.HORIZONTAL;
          gbc_textField.gridx = 0;
          gbc_textField.gridy = 0;
          contentPane.add(textField, gbc_textField);
          textField.setColumns(10);
          
          JScrollPane scrollPane = new JScrollPane();
          GridBagConstraints gbc_scrollPane = new GridBagConstraints();
          gbc_scrollPane.fill = GridBagConstraints.BOTH;
          gbc_scrollPane.gridx = 0;
          gbc_scrollPane.gridy = 1;
          contentPane.add(scrollPane, gbc_scrollPane);
          
          wyniki = new DefaultListModel();
          wyniki.addElement(listaElementow[10]);
          listaWyboru = new JList();
          listaWyboru.setModel(wyniki);
          scrollPane.setViewportView(listaWyboru);
     }
}

Pozdrawiam serdecznie

1 użytkowników online, w tym zalogowanych: 0, gości: 1