Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Code is getting displayed rather than components

Please have a look at the following code

import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class TestSend extends JFrame 
    {
        private Box names, emails;
        private JButton ok;
        private Map mMap;
        private JLabel nameLabel, emailLabel;
        private JPanel mainPanel;
        private JScrollPane scroll;
        private JTable table;
        private Object[][] data;
        private int counter = 0;
        private List nameHolder;

        private String[] colNames = {"Names","Emails"};

        public TestSend()
        {
            nameHolder = new ArrayList();

            names = new Box(BoxLayout.Y_AXIS);
            emails = new Box(BoxLayout.Y_AXIS);

            nameLabel = new JLabel("Names");
            emailLabel = new JLabel("Email");

            mainPanel = new JPanel();
            mainPanel.setLayout(new GridLayout(2,2));

            scroll = new JScrollPane(mainPanel);

            mainPanel.add(nameLabel);
            mainPanel.add(emailLabel);
            mainPanel.add(names);
            mainPanel.add(emails);

            mMap = new HashMap();

            mMap.put("yohan", "[email protected]");
            mMap.put("Gihan", "[email protected]");
            mMap.put("Sumi", "[email protected]");
            mMap.put("mac", "[email protected]");
            mMap.put("Jay", "[email protected]");
            mMap.put("Rom", "[email protected]");
            mMap.put("shane", "[email protected]");
            mMap.put("Mafe", "[email protected]");
            mMap.put("willi", "");


            data = new Object[mMap.size()][mMap.size()];

            Iterator iter = mMap.entrySet().iterator();



            while(iter.hasNext())
            {
                Map.Entry mEntry = (Map.Entry)iter.next();

                JCheckBox cBox = new JCheckBox((String)mEntry.getKey());
                JLabel lLabel = new JLabel();

                names.add(cBox);
                String cName = cBox.getText();

                nameHolder.add(cName);

                if((String)mEntry.getValue() != null && ((String)mEntry.getValue()).length() != 0  && !((String)mEntry.getValue()).equals(""))
                {
                    lLabel = new JLabel((String)mEntry.getValue());
                   // lLabel.setPreferredSize(new Dimension(cBox.getPreferredSize().width,cBox.getPreferredSize().height));
                    emails.add(lLabel);
                    emails.add(new JPanel());

                }
                else
                {
                    lLabel = new JLabel();
                    //lLabel.setPreferredSize(new Dimension(cBox.getPreferredSize().width,cBox.getPreferredSize().height));
                    emails.add(lLabel);
                    emails.add(new JPanel());
                }

                data[counter][0] = cBox;
                data[counter][1] = lLabel;

                counter++;

            }

            table = new JTable(data,colNames);

            this.add(new JScrollPane(table));
            this.pack();
            this.setVisible(true);

        }

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

Here when I run this, what is getting displayed is code, not JCheckBox or JLabel. Situation is displayed in the attachment. Please help

enter image description here

like image 522
PeakGen Avatar asked Nov 16 '25 14:11

PeakGen


1 Answers

You are using JTable fundamentally wrong. You don't add Components to the Model that are displayed by the JTable. Your Model consists of the values. The JTable uses Renderer to display these values. As your values are Components, a type for what no specific renderer is registered, the default renderer is used: toString. Which is not the code, but a String representation of the component.

Please have a look at the JTable tutorial. You need to start over from the beginning.

like image 187
Hauke Ingmar Schmidt Avatar answered Nov 19 '25 05:11

Hauke Ingmar Schmidt