0
votes

Stockage des chaînes du tableau Jlabel au tableau de cordes

Je suis en difficulté pour faire un petit programme en swing qui doit faire ce qui suit:

  1. Faites un clic droit sur le panneau, cliquez sur Option "Ajouter". Il doit ajouter des jlabels dynamiquement à l'intérieur d'une arraylist Jlabel. Li>
  2. Dans le même temps, stockez le texte Jlabel à l'intérieur d'une arrayliste de chaînes. Li>
  3. Imprimez cette arraylist pour tester qu'il ait conçu avec succès le texte à l'intérieur du tableau. li>
  4. plus tard, je vais épargner ce texte en quelque sorte. Pas le problème jusqu'à présent. li> ol>

    Je suis coincé car je ne semble pas savoir comment transférer ce texte d'un tableau à un autre. P>

    Comment cela serait-il fait? P>

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    import javax.swing.AbstractButton;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JTextField;
    import javax.swing.MenuElement;
    
    public class A {
    
        JFrame frame;
        Toolkit toolkit;
        JPopupMenu quickMenu;
        JTextField field1;
        JPanel panel;
    
        ArrayList<JLabel> labelList;
        ArrayList<String> stringArray;
        String texts;
    
        JLabel label1, label2, label3;
        ArrayList<JTextField> fieldList;
        int count;
    
        A() {
    
            frame = new JFrame("A class");
    
            panel = new JPanel();
            panel.setLayout(new GridLayout(2, 3, 5, 5));
    
            JLabel title1 = new JLabel("Title 1");
            panel.add(title1);
    
            setDimm(frame);
    
            quickMenu = new JPopupMenu();
            JMenuItem addRow = new JMenuItem("Add row");
            JMenuItem removeRow = new JMenuItem("Remove row");
    
            quickMenu.add(addRow);
            quickMenu.add(removeRow);
            panel.add(quickMenu);
    
            panel.addMouseListener(new MouseAdapter() {
                public void mouseReleased(MouseEvent e) {
                    if (e.getButton() == e.BUTTON3) {
                        quickMenu.show(e.getComponent(), e.getX(), e.getY());
                    }
    
                }
            });
    
            labelList = new <JLabel>ArrayList();
    
            // ADD ROWS
        count = 0;
        stringArray = new ArrayList();
    
        addRow.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
    
                System.out.println("Starting count is: " + count); // check if
                                                                    // count
                JLabel label = new JLabel ("" + count);                                                 // starts
                                                                    // correctly
                labelList.add(label); // adds new
                                                                // JLabels in
                                                                // the labelList
                                                                // array
    
                // I suspect the problem is here underneath, not sure how to
                // first get the texts inside the arraylist of JLabels and then
                // transfer this text to the array of Strings that I want to
                // print.
                for (int i = 0; i < labelList.size(); i++) {
    
                    stringArray.add(labelList.get(i).getText());
    
                }
    
                panel.add(labelList.get(count));
                panel.revalidate();
                panel.repaint();
    
                count++;
    
                System.out.println("After Click count is: " + count);
                System.out.println("Size of JLabel Array labelList is: " + labelList.size());
                System.out.println("Size of String Array stringArray is: " + stringArray.size());               
                System.out.print("The content of the String ArrayList is: " + stringArray);
                System.out.println();
                System.out.println();               
    
    
            }
    
        });
    
            removeRow.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ev)
    
                {
                    /*
                     * panel.remove(labelList.size() - 1); // Will it delete the
                     * last JLabel from the panel?
                     * labelList.remove(labelList.size()-1);
                     * 
                     * 
                     * panel.revalidate(); panel.repaint(); count--;
                     */
                    System.out.println(count + " and does nothing yet");
    
                }
    
            });
    
            frame.add(panel);
    
            // panel.add(button);
            frame.setVisible(true);
        }
    
        void setDimm(JFrame frame) {
            this.frame = frame;
            frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
            frame.getContentPane().setBackground(Color.gray);
            frame.setSize(800, 600);
            toolkit = frame.getToolkit();
            Dimension size = toolkit.getScreenSize();
            frame.setLocation((size.width - frame.getWidth()) / 2, (size.height - frame.getHeight()) / 2);
    
        }
    
        public static void main(String[] args) {
            new A();
        }
    }
    


4 commentaires

Qu'est-ce que l'erreur / l'exception obtenez-vous?


Pas d'erreur. Il est juste surveillé le deuxième tableau. Le nombre de démarrage est le suivant: 2 Après clic Compter est: 3 Taille du labelliste de jlabel Array est le suivant: 3 Taille de la taille de la chaîne SRYARRAY est: 6 ArrayList est: [0, 0, 1, 0, 1, 2]


Du code que vous avez posté: Je soupçonne que le problème est ici dessous votre suspicion est correct. Selon le code que vous avez posté, chaque fois que vous choisissez l'option de menu Ajouter une ligne , vous ajoutez un nouveau jlabel à labelliste , puis vous ajoutez le Texte pour Tous Les étiquettes à Stringarray . Ajoutez simplement le texte de la nouvelle étiquette à Stringarray . Pas besoin d'une boucle.


MDR. Brillant. Ça a marché. Merci. Je vais mettre à jour le code pour montrer à quelqu'un d'autre si elle a besoin d'aide


3 Réponses :


1
votes

Vous utilisez ce code pour ajouter de texte à la flaryse: xxx

Remplacez celui-ci avec ceci pour le texte des étiquettes: xxx

aussi Vous n'avez pas d'achatérer sur le labelliste à toutes les épions, seulement une nouvelle étiquette, ne l'ajoutez pas au labelliste et le texte de l'étiquette à la limite de fichiers: xxx


2 commentaires

Salut. J'ai aussi essayé que et apparemment maintenant, il itière plusieurs fois le tableau des chaînes. Aux fins du débogage, j'ai ajouté l'imprimeur pour connaître la longueur des deux tableaux et la chaîne que l'une va 1,3,6,10,15 tandis que le tableau JLABEL va correctement de 1,2,3,4,5. Exemple En dessous: Taille de Jlabel Array Labellist est: 6 Taille de la taille de la chaîne STRYARRAY est: 15 ArrayList est: [0, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3 , 4]. J'ai mis à jour le code initial avec cette erreur


Retourner à ce problème, je ne pense pas que la solution est correcte. Il semble que cela ne reçoit que la dernière valeur dans le tableau Jlabel, mais elle ne reconnaît pas correctement tous les Jlabel dans le tableau des étiquettes



1
votes

Bonjour. J'ai aussi essayé que et apparemment maintenant, il itière plusieurs fois le tableau des chaînes. Aux fins du débogage, j'ai ajouté l'imprimeur pour connaître la longueur des deux tableaux et la chaîne que l'une va 1,3,6,10,15 tandis que le tableau JLABEL va correctement de 1,2,3,4,5. Exemple En dessous: Taille de Jlabel Array Labellist est: 6 Taille de la taille de la chaîne STRYARRAY est: 15 ArrayList est: [0, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3 , 4]. J'ai mis à jour le code initial avec cette erreur p>

Oui, remplacez ce code: p>

stringArray.add(label.getText());

0 commentaires

0
votes

C'était résolu par Abra et ZamarianPatrick. Je pose le code si quelqu'un d'autre peut rechercher cette solution. C'était tellement simple ... merci !!!

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;

public class A {

    JFrame frame;
    Toolkit toolkit;
    JPopupMenu quickMenu;
    JTextField field1;
    JPanel panel;

    ArrayList<JLabel> labelList;
    ArrayList<String> stringArray;
    String texts;

    JLabel label1, label2, label3;
    ArrayList<JTextField> fieldList;
    int count;

    A() {

        frame = new JFrame("A class");

        panel = new JPanel();
        panel.setLayout(new GridLayout(2, 3, 5, 5));

        JLabel title1 = new JLabel("Title 1");
        panel.add(title1);

        setDimm(frame);

        quickMenu = new JPopupMenu();
        JMenuItem addRow = new JMenuItem("Add row");
        JMenuItem removeRow = new JMenuItem("Remove row");

        quickMenu.add(addRow);
        quickMenu.add(removeRow);
        panel.add(quickMenu);

        panel.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                if (e.getButton() == e.BUTTON3) {
                    quickMenu.show(e.getComponent(), e.getX(), e.getY());
                }

            }
        });

        labelList = new <JLabel>ArrayList();

        // ADD ROWS
        count = 0;
        stringArray = new ArrayList();

        addRow.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                System.out.println("Starting count is: " + count); // check if
                texts = "" + count; // count
                JLabel label = new JLabel(texts); // starts
                // correctly
                labelList.add(label); // adds new
                                        // JLabels in
                                        // the labelList

                stringArray.add(label.getText());

                panel.add(labelList.get(count));
                panel.revalidate();
                panel.repaint();

                count++;

                System.out.println("After Click count is: " + count);

                System.out.println("Size of JLabel Array labelList is: " + labelList.size());
                System.out.println("Size of String Array stringArray is: " + stringArray.size());
                System.out.print("The content of the String ArrayList is: " + stringArray);
                System.out.println();
                System.out.println();

            }

        });

        removeRow.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev)

            {
                /*
                 * panel.remove(labelList.size() - 1); // Will it delete the
                 * last JLabel from the panel?
                 * labelList.remove(labelList.size()-1);
                 * 
                 * 
                 * panel.revalidate(); panel.repaint(); count--;
                 */
                System.out.println(count + " and does nothing yet");

            }

        });

        frame.add(panel);

        // panel.add(button);
        frame.setVisible(true);
    }

    void setDimm(JFrame frame) {
        this.frame = frame;
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.getContentPane().setBackground(Color.gray);
        frame.setSize(800, 600);
        toolkit = frame.getToolkit();
        Dimension size = toolkit.getScreenSize();
        frame.setLocation((size.width - frame.getWidth()) / 2, (size.height - frame.getHeight()) / 2);

    }

    public static void main(String[] args) {
        new A();
    }
}


0 commentaires