Code is getting displayed rather than components

跟風遠走 提交于 2019-12-12 20:19:19

问题


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", "yy@yahoo.com");
            mMap.put("Gihan", "gihan@yahoo.com");
            mMap.put("Sumi", "sumi@yahoo.com");
            mMap.put("mac", "mac@yahoo.com");
            mMap.put("Jay", "jay@yahoo.com");
            mMap.put("Rom", "rom@yahoo.com");
            mMap.put("shane", "shane@yahoo.com");
            mMap.put("Mafe", "mafe@yahoo.com");
            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


回答1:


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.




回答2:


Change:

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

To:

....
data[counter][0] = cBox.getText();
data[counter][1] = lLabel.getText();
.....



来源:https://stackoverflow.com/questions/13345504/code-is-getting-displayed-rather-than-components

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!