java - 如何使 JTable 单元格在运行时可编辑或不可编辑?

标签 java swing jtable tablemodel

我正在使用 JTable,表中的参数通过 HashMap 传递。 Hash Map 包含 2 个参数。 1 是键(字符串),另一个是值(即 vector )。 Vector包含两件事:第一个值(对应于Key),另一个是字符(R/W)。(读/写)。

我已经通过这个HashMap创建了一个表。但是我无法在运行时使用“R/W”值。 如果特定单元格包含“R”,则表示该特定单元格仅可用于读取(不可编辑单元格)。 如果特定单元格包含“W”,则表示该特定单元格仅可用于写入新值(可编辑单元格)。

SSCCE:

import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Enumeration;
import java.util.Vector;
import java.util.List;
import javax.swing.table.TableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
public class DataTable extends JTable implements ActionListener,ItemListener,MouseListener
{
String ReadOrWrite[][];
JTable table;
public DataTable()
{
    try
    {
        HashMap<String,String> HMap;
        String array[][];
        int count = 0;
        Vector Val;
        JFrame frame = new JFrame("Table");
        JPanel panel = new JPanel();
        HMap = getMetaData();
        array = new String[HMap.size()][2];
        ReadOrWrite = new String[HMap.size()][2];
        for (Map.Entry entry : HMap.entrySet())
        {
            array[count][0] = (String) entry.getKey();
            Val = (Vector) entry.getValue();
            array[count][1] = (String) Val.elementAt(0);
            String s1 = (String) Val.elementAt(1);
            ReadOrWrite[count][1] = s1;
            count++;
        }
            String TableLabels[] = {"Field", "Values"};
            table = new JTable(array, TableLabels);
            table.addMouseListener(new MouseAdapter()
            {
                public void mouseClicked(MouseEvent e)
                {
                }
             }
            JTableHeader header = table.getTableHeader();
            JScrollPane scrollPane = new JScrollPane(table);
            panel.add(scrollPane);
            frame.add(panel);
            frame.add(scrollPane, BorderLayout.CENTER);
            frame.setSize(300, 400);
            frame.setResizable(true);
            frame.setVisible(true);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
HashMap getMetaData()
{
    HashMap ta=new HashMap();

    Vector vec1 =new Vector();
    vec1.add("1");
    vec1.add("R");
    Vector vec2 =new Vector();
    vec2.add("2");
    vec2.add("W");
    ta.put("A",vec1);
    ta.put("B",vec2);
    return ta;
}
public void itemStateChanged(ItemEvent e)
{
}
public void actionPerformed(ActionEvent e)
{
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}

} 这是我的表的完整代码。

最佳答案

如果您已经实现了自己的TableModel ,您可以定义isCellEditable仅当例如以下情况时才返回 true 的方法:第二列等于'W'

关于java - 如何使 JTable 单元格在运行时可编辑或不可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7789542/

相关文章:

Java int 值类型转Character

java - 将选项/参数文件传递给 Maven 编译器插件

java - 图像不会绘制,使用Canvas+double Buffering+Buffered Image

Java jTable MouseListener 不工作

swing - JTable、自定义标题渲染器和排序图标

java - 显示每个时区的时间

java - JFrame更新问题

Java GUI 分配,不知道如何解决?

java - 需要帮助创建数组

java - 在 Java JDK 1.6 中,我需要运行一个接受重定向输入的可执行文件