2017-02-17 9 views
2

私はCodename Oneを初めて使用しています。スタックオーバーフローに関する質問は初めてです。私は両方が素晴らしいと思う!Codename Oneのテーブル内の行を選択してハイライトする方法

私はCodename OneのTableクラスに関する質問があります。私は、Web、スタックオーバーフロー、API、すべてを検索し、良い答えを見つけることができません。

行を選択して強調表示して、後でデータを操作できるようにしたいと考えています。私はcreateCellメソッドをオーバーライドしてすべてのセルボタンを作成することによって動作させることにしましたが、これは許容される方法ではありません。問題は、ユーザーがセルをクリックするたびにテーブルを再構築する必要があるためです。

テーブルに表示可能な行数より多くの行が含まれていて、テーブルが再構築されると、テーブルはテーブルの先頭に戻ります。ユーザは、それを見たい場合には、選択された行にスクロールバックしなければならない。テーブルの周りをジャンプすることは容認できません。

また、表の他のコントロールを使用することもできます。私はtable.getSelectedRow()があることを知っているので、私は何かが欠けている可能性があります。また、プログラムで行を選択する方法も知っています。

ご協力いただきありがとうございます。

答えて

0

私が使用するソリューションは以下の通りです:

  1. 単一選択の場合は、最初の列のラジオボタン。
  2. 複数選択の場合は、最初の列のチェックボックスをオンにします。

私はまだcom.codename1.ui.table.TableクラスのgetSelectedRow()が何であるか不思議です。

私はこれが他の誰かのGUI設計に役立つことを願っています。

0

これは、Tableのjavadocsのサンプルに基づいています。私は1つのマイナーなハックを手動でテーブルの更新をトリガするsetModel(getModel())た:

Form hi = new Form("Table", new BorderLayout()); 
TableModel model = new DefaultTableModel(new String[] {"Col 1", "Col 2", "Col 3"}, new Object[][] { 
    {"Row 1", "Row A", "Row X"}, 
    {"Row 2", "Row B can now stretch", null}, 
    {"Row 3", "Row C", "Row Z"}, 
    {"Row 4", "Row D", "Row K"}, 
    }) { 
     public boolean isCellEditable(int row, int col) { 
      return col != 0; 
     } 
    }; 
Table table = new Table(model) { 
    private int selectedRow = -1; 
    @Override 
    protected Component createCell(Object value, int row, int column, boolean editable) { 
     Component cell; 
     if(row < 0) { 
      cell = super.createCell(value, row, column, editable); 
     } else { 
      cell = new Button(value.toString()); 
      cell.setUIID("TableCell"); 
      ((Button)cell).addActionListener(e -> { 
       selectedRow = row; 
       setModel(getModel()); 
      }); 
     } 
     if(selectedRow > -1 && selectedRow == row) { 
      cell.getAllStyles().setBgColor(0xff0000); 
      cell.getAllStyles().setBgTransparency(100); 
     } 
     return cell; 
    } 

    @Override 
    protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) { 
     TableLayout.Constraint con = super.createCellConstraint(value, row, column); 
     if(row == 1 && column == 1) { 
      con.setHorizontalSpan(2); 
     } 
     con.setWidthPercentage(33); 
     return con; 
    } 
}; 
hi.add(BorderLayout.CENTER, table); 
hi.show(); 

enter image description here

+0

ありがとうございました。私はトピックについての研究を行い、質問をする前に、この同じ解決策を考え出しました。しかし、それは私のすべての要件を満たしていません。私は答えとして投稿する代替案を考え出した。あなたの助けをもう一度ありがとう。 – Chuck

関連する問題