2011-10-17 17 views
0

JTableを使用していて、テーブルのパラメータがハッシュマップを通過しています。 ハッシュマップには2つのパラメータが含まれています。 1はkey(String)&で、他はValue(Vector)です。 Vectorには、最初の値(Keyに対応)とその他の文字(R/W)(Read/Write)の2つが含まれています。実行時にJTableセルを編集可能または編集不可能にする方法はありますか?

私は、実行時に、「R/W」の値を使用することはできませんよ、このHashMap.Butてテーブルを作成してもらってください。 睾丸細胞に「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) { 
} 

} これは私の表の完全なコードです。

+0

、[SSCCE](http://pscode.org/sscce.html)を投稿してください。 –

+0

PLZリンクを見てください。**は** SSCCEではありません。また、単語を完全に綴るように努力してください。 –

+0

*「私はどのようにこのSSCCEを作成することを理解していない。」*あなたは何を理解していない(それは、ない「PLZ」「してください」ですか)?略語の言葉を理解していますか? –

答えて

3

TableModelを実装している場合は、trueを返すようにisCellEditableメソッドを定義できます。 2列目は'W'になります。

+0

R/Wはどこに保管していますか?表示されている表に表示されていないがデータ構造内にある場合は、引数として与えられた列に関係なく、現在の行のR/Wに応じてtrueを返すことができます。 – Vlad

+0

ハッシュマップがテーブルにどのように渡されるかについて少し具体的にできますか?私が覚えているのは、デフォルトモデルではベクトルのベクトルが使用されるため、変換がいくつかあります。 – Vlad

2

JTableのセルを選択的に読み取り専用にするには、JTableのisCellEditable()メソッドをオーバーライドし、実装に必要なロジックを指定します。カスタムTableModelを持っている場合は

、あなたの代わりにそこisCellEditable()を上書きすることができます。

どちらの場合でも、rowおよびcolumnパラメータで指定されたセルに 'W'が含まれている場合にのみ、isCellEditable()の実装でtrueが返されます。早いほど良いのヘルプについて