0

私は JTable を使用しており、テーブル内のパラメータはハッシュ マップを通過しています。ハッシュ マップには 2 つのパラメーターが含まれます。1 はキー (文字列) で、もう 1 つは値 (ベクトル) です。ベクトルには、最初の値 (キーに対応する) と文字 (R/W) (読み取り/書き込み) の 2 つのものが含まれます。

この 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) {
}

これは私のテーブルの完全なコードです。

4

2 に答える 2

3

独自のTableModelを実装している場合は、 isCellEditableメソッドを定義して、trueたとえば 2 番目の列が等しい場合にのみ返すことができます'W'

于 2011-10-17T05:12:57.673 に答える
2

JTable内の一部のセルを選択的に読み取り専用にするには、JTable のisCellEditable()メソッドをオーバーライドし、実装で必要なロジックを提供します。

カスタムのTableModelがある場合は、代わりにisCellEditable()をオーバーライドできます。

trueどちらの場合でも、行と列のパラメーターで指定されたセルに「W」が含まれている場合にのみ、isCellEditable() の実装が返されます。

于 2011-10-17T05:13:30.577 に答える