显示代码而不是显示组件 [英] Code is getting displayed rather than components
问题描述
请看下面的代码
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();
}
}
在这里,当我运行此代码时,显示的是代码,而不是JCheckBox或JLabel.情况显示在附件中.请帮助
Here when I run this, what is getting displayed is code, not JCheckBox or JLabel. Situation is displayed in the attachment. Please help
推荐答案
您使用JTable
根本错误.请勿将Component
添加到JTable
显示的Model
中.您的Model
由值组成. JTable
使用Renderer
显示这些值.由于您的值是Component
,即未注册任何特定渲染器的类型,因此将使用默认渲染器:toString
.这不是代码,而是组件的String
表示形式.
You are using JTable
fundamentally wrong. You don't add Component
s 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 Component
s, 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.
请查看 JTable教程.您需要从头开始.
Please have a look at the JTable tutorial. You need to start over from the beginning.
这篇关于显示代码而不是显示组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!