Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java]Probleme avec une JList

    7 avril 2008 à 14:55:07

    Salut tout le monde,
    Je suis un debutant en Java, ca fait a peu pres 6 mois que j'apprend a programmer, et la je suis en train de realiser mon premier "Final Project". Je dois creer un pseudo JavaPaint en utilisant Swing, un truc assez simple. La j'essaie de creer une JList, mais je n'arrive pas a utiliser la methode setVisibleRowCount(int); Je vais vous montrer mon code - c'est un programme test que j'utilise pour voir comment SWING fonctionne avant d'implementer les different element dans mon projet final:
    1. package package0;
    2. import java.awt.Color;
    3. import java.awt.Container;
    4. import java.awt.Dimension;
    5. import java.awt.FlowLayout;
    6. import java.awt.Graphics;
    7. import java.util.ArrayList;
    8. import java.awt.event.*;
    9. import javax.swing.*;
    10. public class NewWindowFromButton extends JFrame{
    11.         protected JPanel panel;
    12.         protected JButton drawLine;
    13.         protected JComboBox listOfShapes;
    14.         protected JList list;
    15.         protected String[] slang = {"haha", "lol", "www", "rofl", "woot", "1337", "H4x0r", "meh", "haha", "lol", "www", "rofl", "woot", "1337", "H4x0r", "meh"};
    16.         public static void main(String[] args) {
    17.                 NewWindowFromButton frame = new NewWindowFromButton();
    18.                 frame.setSize(450, 400);
    19.                 frame.createGUI();
    20.                 frame.show();
    21.         }
    22.         private void createGUI() {
    23.                 setDefaultCloseOperation(EXIT_ON_CLOSE);
    24.                 Container window = getContentPane();
    25.                 window.setLayout(new FlowLayout());
    26.                 // Create and display panel
    27.                 panel = new JPanel();
    28.                 panel.setPreferredSize(new Dimension(400,200));
    29.                 panel.setBackground(Color.white);
    30.                 window.add(panel);
    31.                 // Create Buttons and display them
    32.                 drawLine = new JButton("draw line");
    33.                 window.add(drawLine);
    34.                 // drop down menu
    35.                 listOfShapes = new JComboBox(slang);
    36.                 listOfShapes.setMaximumRowCount(3);
    37.                 window.add(listOfShapes);
    38.                 // JList
    39.                 list = new JList(slang);
    40.                 list.setVisibleRowCount(5);  //  doesn't seem to work....
    41.                 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    42.                 add(new JScrollPane(list));
    43.                 window.add(list);
    44.         }
    45. }


    Je sais qu'il y a quelque chose qui ne va pas dans mon code, mais je ne sais pas quoi. Ce que j'essaie de faire c'est de creer un JList avec une seule colonne, 5 element visibles a lafois et une scrollbar pour voir les autres elements. Le probleme la c'est qu'il n'y a pas de scrollbar et que tous les element sont affiches au lieu de 5...
    Est-ce que quelqu'un pourrait me dire ou est mon erreur svp?

    Merci d'avance

    Pr. K
    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2008 à 13:59:03

      Un petit up!
      En fait ce que j'essaie de faire, c'est d'afficher le contenu d'une ArrayList dans un element de SWING. Le probleme, c'est que JList et JComboBox ne prenne en compte que les Arrays et non les ArrayList. Donc ma nouvelle question (bien que la premiere question reste valide) est: Comment afficher le contenu d'une ArrayList en utilisant des element de SWING?

      Merci d'avance

      Pr. K
      • Partager sur Facebook
      • Partager sur Twitter
        9 avril 2008 à 14:34:56

        Citation : Professor_K

        Comment afficher le contenu d'une ArrayList en utilisant des element de SWING?



        Salut,

        Toutes liste java a une méthode toArray() ... donc , tu peu obtenir un array à partir de n'importe quelle List (et meme Collection ;) )

        1. Object[] toArray()


        Utilisation :
        1. List maListe<MaClasse> = new ArrayList<MaClasse>();
        2. maListe.add(new MaClasse("foo"));
        3. maListe.add(new MaClasse("bar"));
        4. maJList.setListData(maListe.toArray());


        Voilà ;)
        XantaX
        • Partager sur Facebook
        • Partager sur Twitter
          10 avril 2008 à 1:28:32

          YES! Ca marche :lol: Merci beaucoup. Je connaissais pas toArray(), elle est geniale cette methode :D Maintenant il reste le probleme de la JList que je n'arrive pas configurer... je te remet le bout de code dont je parle:

          1. // drop down menu
          2. listOfShapes = new JComboBox(slang);
          3. listOfShapes.setMaximumRowCount(3);
          4. window.add(listOfShapes);
          5. // JList
          6. list = new JList(slang);
          7. list.setVisibleRowCount(5);  //  doesn't seem to work....
          8. list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
          9. add(new JScrollPane(list));
          10. window.add(list);


          En fait j'aimerai que la JList ressemble a la ComboBox "deroulee". Mais je n'arrive pas par exemple a limiter le nombre d'element a afficher dans la JList. Par contre j'arrive tres bien a utiliser la ComboBox.

          Sinon j'ai une tonne de question sur l'utilisation de swing, donc au lieu de toutes les poser et de faire un enorme hors sujet je vais les resumer avec une seule question: Ou je peux trouver un tuto/guide sur swing a part sur google? Je dis a part sur google parce que des que je vais publier cette reponse je vais aller faire une recherche sur google, j'ai pas besoin que vous fassiez la recherche pour moi :lol: mais si vous avez des addresses sympa balancez toujours :)

          Merci encore pour ton aide,

          Pr. K
          • Partager sur Facebook
          • Partager sur Twitter
            10 avril 2008 à 12:11:59

            Salut,

            Deux liens qui peuvent t'aider.
            Tout d'abord, la documentation Java, puis un cours pas mal sur le swing.

            Bon courage.
            • Partager sur Facebook
            • Partager sur Twitter
              10 avril 2008 à 12:55:57

              Merci beaucoup.
              La Doc de sun je l'ai trouve hier soir en faisant une petite recherche sur google. Par contre le second lien (le PDF) a l'air assez sympa. Je verrai ca plus tard.
              Je vais etudier ces deux liens ce soir et puis si j'ai des questions (j'en aurai surement) je reviendrai les poser sur ce sujet.

              En attendant, si vous avez d'autres liens a proposer je ne demande pas mieux. (Les liens en anglais ne me derangent pas, au contraire, j'ai tendance a preferer les doc en anglais :D)

              EDIT: Alors deja le pdf en francais m'a beaucoup aide, donc re-merci beaucoup dix fois. Mais la j'ai un petit probleme. J'ai reussi a mettre mon ArrayList dans une JList qui est elle meme dans une ScrollPane. Jusqu'a la tout marche a merveille. Puis j'ai essaye d'actualiser la JList a chaque fois que j'ajoute un element a la ArrayList. J'ai fait une petite recherche et j'ai trouve la reponse sur le forum; j'ai essaye de l'adapter mais ca n'a pas marche. Voila mon code:

              1. protected JButton blalaaa;
              2. protected ArrayList list2 = new ArrayList();
              3. ...
              4. // Create Buttons and display them
              5. blalaaa = new JButton("blalaaa");
              6. window.add(blalaaa);
              7. // JList + ScrollPane
              8. JScrollPane scrollPane = new JScrollPane();
              9. scrollPane.setPreferredSize(new Dimension(100, 110));
              10. list = new JList(list2.toArray());
              11. scrollPane.setViewportView(list);
              12. setPreferredSize(new Dimension(100, 110));
              13. getContentPane().add(scrollPane);
              14. // Adding elements to the ArrayLSist list2
              15. list2.add ("bdsajk");
              16. list2.add ("bdsak");
              17. list2.add ("bdsk");
              18. list2.add ("bdk");
              19. list2.add ("bk");
              20. list2.add ("jk");
              21. public void actionPerformed(ActionEvent event){
              22.                 Graphics paper = panel.getGraphics();
              23.                 Object source = event.getSource();
              24.                 if (source == blalaaa){
              25.                         list2.add("blalaaa");
              26.                         // refresh code
              27.                         this.remove(list);
              28.                         this.add(new JScrollPane());
              29.                         this.validate();
              30.                 }
              31. }


              Desole si les commentaires sont en anglais :euh:
              Je ne sais pas si j'ai bien utilise le "refresh code" (le code qui est cense actualiser la JList), mais en tout cas dans cet etat ca ne fonctionne pas...
              Quelqu'un pourrait-il me dire ou est le probleme svp?

              Merci d'avance
              Pr. K
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2008 à 18:50:22

                Bon j'ai reussi a resoudre mon probleme, mais la j'ai un autre probleme: J'ai un bouton qui efface toutes les formes du panel sans les effacer de la ArrayList. Maintenant je suis en train de chercher un moyen de recreer toute les formes de la ArrayList.

                Le code est sur cette page: http://ac.aup.fr/~a70450/

                Le bloc de code en question commence a la ligne 267.
                J'ai essaye pas mal de truc du genre paper.addAll(shapes); mais par exemple si je fait ca ca me dit que addAll ne fonctionne pas avec des objets de type Graphics mais seulement avec des ArrayList. Le probleme c'est que shapes est une ArrayList qui contient des shapes...
                Quelqu'un aurait une solution a mon probleme svp?

                • Partager sur Facebook
                • Partager sur Twitter

                [Java]Probleme avec une JList

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown