2

セル内にチケット情報を含むJTableを表示する小さなPOSアプリケーションを作成しています。CellRendererは、JPanelを拡張し、TableCellRendererを実装するクラスであり、基本情報(数量、説明、価格)を示すいくつかのJTextFieldが含まれています。また、JPanelを拡張し、CellEditorとして使用されるTableCellEditorを実装する別のクラスがあります。このクラスには、より多くのJTextFieldといくつかのjButtonが含まれています。

必要なのは簡単です。マウスでクリックして(または画面に触れて、同じイベントである)セルを編集するときは、編集するセルの高さを動的に増やします。そのため、エディター内のすべてのコンポーネントを表示できます。編集が終了したら、セルの高さを以前の値に戻します。

それをすることについて何か考えはありますか?

前もって感謝します。:-)

4

3 に答える 3

1

CellRenderer は、JPanel を拡張して TableCellRenderer を実装するクラスであり、基本情報 (数量、説明、価格) を示すいくつかの JTextField を含みます。また、JPanel を拡張し、CellEditor として使用される TableCellEditor を実装する別のクラスがあります。このクラスには、さらに多くの JTextField といくつかの jButton が含まれています。

JDialogからのイベントに基づいてポップアップ ウィンドウ ( ) を作成することをお勧めしますJPopupMenu

編集時に JTable の行の高さを動的に増やし、編集の終了時に減らす

ユーザーを混乱させないでくださいJTables row。画面上でジャンプすると、間違った概念が生じる可能性があります

私が必要とするのは簡単です:マウスでクリックして(または、私の知る限り、同じイベントである画面に触れて)任意のセルを編集すると、編集しようとしているセルの高さが動的に増加します。そのため、エディター内のすべてのコンポーネントを表示できます。編集が終わったら、セルの高さを元の値に戻します。

それはしませんが、オーバーライドする必要があります。

  • DefaultCellEditor#setClickCountToStart(int)為にTableCellEditor

  • startstopおよびcancelEdit_CellEditor

  • notifyまたはでなければなりません とでre_Layout JTable同じstopcancelEdit

于 2012-10-04T12:45:51.050 に答える
1

how-to-adjust-rowHeights への回答ではありませんが、私のコメントで言及されている代替案については、完全な rowHeight を更新する代わりに、editorComponent を「オーバーサイズ」するだけです (これはユーザーにとって刺激的すぎると思いますが、決定するのはあなた次第です)。 、 もちろん :)

// fake a bigger editing component
JTextField oversized = new JTextField() {

    @Override
    public Dimension getPreferredSize() {
        Dimension dim = super.getPreferredSize();
        dim.height *= 5;
        return dim;
    }

};

TableCellEditor editor = new DefaultCellEditor(oversized);
JTable table = new JTable(new AncientSwingTeam()) {

    @Override
    public boolean editCellAt(int row, int column, EventObject e) {
        boolean result = super.editCellAt(row, column, e);
        if (result) {
            // adjust cell bounds of the editing component
            Rectangle bounds = getEditorComponent().getBounds();
            bounds.height = getEditorComponent().getPreferredSize().height;
            getEditorComponent().setBounds(bounds);
        }
        return result;
    }

    @Override
    public void removeEditor() {
        int editingColumn = getEditingColumn();
        super.removeEditor();
        if (editingColumn >= 0) {
            // cleanup
            repaint();
        }
    }


};
table.getColumnModel().getColumn(0).setCellEditor(editor);
于 2012-10-04T13:31:48.107 に答える
0

試しませんでしたが、MouseListenermouseClicked()メソッドを実装するのが良い方法だと思います。セルの高さがすでに増加しているかどうかを追跡し、それに応じて高さを変更します。

MouseListenerはインターフェイスなのでCellRenderer、このインターフェイスも実装して、すべてのセルの動作を1つのクラスに保つことができます。

于 2012-10-04T11:31:45.580 に答える