【问题标题】:Java - Custom JTabel show weird textJava - 自定义 JTable 显示奇怪的文本
【发布时间】:2014-05-18 12:31:16
【问题描述】:

我正在制作一个显示数据的应用程序。但它不会。我只是显示了一些奇怪的String,它说jeremy.ItemsData@33f1ca93,另一个表格单元格显示jeremy.ItemsData@427a9389。 这是我的代码。我从某个地方获得了代码并对其进行了修改,因为我不希望我的应用程序看起来像那样。

public class JTables extends JFrame
{
    private static final long serialVersionUID = 7866940189661427857L;
    public JScrollPane scroll;
    public JTable table;
    private List<ItemsData> items;

    public JTables(List<ItemsData> i)
    {
        items = i;
        initGUI();
    }

    private void initGUI()
    {
        items.add(new ItemsData("JustTesting", null, null, null, null, null, null));

        scroll = new JScrollPane();
        table = new JTable(new JTablesModel(items));

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        table.setDefaultRenderer(ItemsData.class, new JTablesCell());
        table.setDefaultEditor(ItemsData.class, new JTablesCell());
        table.setRowHeight(292);

        scroll.setViewportView(table);

        add(scroll);
        pack();
    }
}

public class JTablesModel extends AbstractTableModel implements TableModel
{
    private static final long serialVersionUID = 3752534513457351699L;
    private List<ItemsData> item;

    public JTablesModel(List<ItemsData> i)
    {
        this.item = i;
    }

    @Override
    public Class<?> getColumnClass(int columnIndex)
    {
        return Items.class;
    }

    @Override
    public String getColumnName(int column)
    {
        return "Items";
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex)
    {
        return true;
    }

    @Override
    public int getColumnCount()
    {
        return 1;
    }

    @Override
    public int getRowCount()
    {
        return (item==null) ? 0 : item.size();
    }

    @Override
    public Object getValueAt(int arg0, int arg1)
    {
        return (item==null) ? null : item.get(arg0);
    }

}

public class JTablesCell extends AbstractCellEditor implements TableCellEditor, TableCellRenderer
{

    private static final long serialVersionUID = -7826925896868335289L;
    public JLabel data;
    public JLabel icon;
    public JLabel id;
    public JLabel lvl;
    public JLabel name;
    public JLabel type;
    public JPanel p;

    public JTablesCell()
    {
        initGUI();
    }

    private void initGUI()
    {
        p = new javax.swing.JPanel();
        icon = new javax.swing.JLabel();
        name = new javax.swing.JLabel();
        type = new javax.swing.JLabel();
        lvl = new javax.swing.JLabel();
        data = new javax.swing.JLabel();
        id = new javax.swing.JLabel();

        name.setFont(new java.awt.Font("Times New Roman", 0, 24)); // NOI18N
        name.setText("Name");

        type.setText("Type");

        lvl.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        lvl.setText("Min Lvl");

        data.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        data.setText("data");

        id.setForeground(new java.awt.Color(255, 0, 51));
        id.setText("Hover to view identification");

        javax.swing.GroupLayout pLayout = new javax.swing.GroupLayout(p);
        p.setLayout(pLayout);
        pLayout.setHorizontalGroup(
            pLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pLayout.createSequentialGroup()
                .addGroup(pLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pLayout.createSequentialGroup()
                        .addGap(35, 35, 35)
                        .addComponent(icon, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(44, 44, 44))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(id)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
                .addGroup(pLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pLayout.createSequentialGroup()
                        .addGroup(pLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(type, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(lvl, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(data, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pLayout.createSequentialGroup()
                        .addComponent(name, javax.swing.GroupLayout.DEFAULT_SIZE, 127, Short.MAX_VALUE)
                        .addGap(22, 22, 22))))
        );
        pLayout.setVerticalGroup(
            pLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pLayout.createSequentialGroup()
                .addGroup(pLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pLayout.createSequentialGroup()
                        .addComponent(name)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(type)
                        .addGap(18, 18, 18)
                        .addComponent(lvl))
                    .addGroup(pLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(icon, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(data)
                    .addComponent(id)))
        );
    }

    private void update(ItemsData id, boolean isSelected, JTable t)
    {
        this.name.setText(id.name);
    }

    @Override
    public Object getCellEditorValue()
    {
        return null;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        ItemsData id = (ItemsData)value;
        update(id, true, table);
        return p;
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
    {
        ItemsData id = (ItemsData)value;
        update(id, isSelected, table);
        return p;
    }

}

我只添加了 I 表格单元格,但它显示了两个。它也有一些奇怪的文字。任何人都可以改进我的代码以使其更好地工作吗?谢谢

【问题讨论】:

  • 隔离问题;你发布了太多代码。
  • @NewWorld "我正在制作一个显示数据的应用程序。但它不会。我只是显示一些奇怪的字符串,它说 jeremy.ItemsData@33f1ca93 和另一个表格单元格显示 jeremy.ItemsData@427a9389 . 这是我的代码。我从某个地方获得了代码并对其进行了修改,因为我不希望我的应用程序看起来像那样。”
  • 是的,没有人会通读所有代码来调试您的程序。这不是在本网站上得到解答的问题。
  • @NewWorld 好吧。如果我不发布任何代码,你会说什么?
  • 那么问题将因为太少而被关闭。正如我所说,找出问题发生在程序中的哪个位置,那么您更有可能获得帮助。

标签: java swing user-interface jtable abstracttablemodel


【解决方案1】:

解决办法

@Override
public Object getValueAt(int arg0, int arg1) {
    return (item == null) ? null : item.get(arg0).name;
}

应该是

item.get(arg0).name;

而不是

item.get(arg0); // It returns object to ItemsData class.

您也可以通过在现有代码中使用 item.get(arg0); 覆盖 toString() 类的 toString() 方法以及 item.get(arg0); 来做到这一点

class ItemsData{

    public ItemsData(String string) {
        name = string;
    }

    public String name;

    @Override
    public String toString(){
        return name;
    }
}

【讨论】:

  • 感谢它现在工作正常。但是正如你所看到的,items.add(new ItemsData("JustTesting", null, null, null, null, null, null)); 有很多字段我想放在里面。我该怎么办?
  • 一个,但它有多个行。这就是我希望它在每一行中看起来像imgur.com/wd1D3ns
  • 另外,我只添加了 1 行。但它显示 2 行相同的东西
  • 阅读更多关于How to Use Tables
  • 制作一个你自己写的样例项目,如果还是有什么困惑,那就再发个帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多