2

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

enter image description here

4

2 に答える 2

9

使い方がJTable 根本的に間違っています。によって表示される には をComponent追加しません。あなたはで構成されています。を使用してこれらの値を表示します。値がs であるため、特定のレンダラーが登録されていないタイプであり、デフォルトのレンダラーが使用されます: . これはコードではなく、コンポーネントの表現です。ModelJTableModelJTableRendererComponenttoStringString

JTable チュートリアルをご覧ください。最初からやり直す必要があります。

于 2012-11-12T14:35:34.587 に答える
1

変化する:

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

に:

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

ここに画像の説明を入力

于 2012-11-12T14:49:16.787 に答える