4

私はJTableを使用しています。そこに Date 列があり、セルをクリックすると JXDatePicker が表示され、そこから日付を選択できるようにする必要があります。

誰かがこれを行う方法を教えてもらえますか?

ありがとう!答えを待っている..

4

4 に答える 4

10

おそらく、エディタコンポーネントとしてを使用するを使用する必要DatePickerCellEditorがあります。例えば:CellEditorJXDatePicker

TableColumn dateColumn = table.getColumnModel().getColumn(columnIndex);
dateColumn.setCellEditor(new DatePickerCellEditor());

デモテーブルは次のとおりです。

import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableColumn;

import org.jdesktop.swingx.table.DatePickerCellEditor;

public class DateColumnDemo {

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("DateColumnDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTable table = new JTable(new Object[][] { { "1", new Date() } },
                new Object[] { "Id", "Time" });

        TableColumn dateColumn = table.getColumnModel().getColumn(1);
        dateColumn.setCellEditor(new DatePickerCellEditor());

        JScrollPane scrollPane = new JScrollPane(table); 

        frame.add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
于 2012-08-06T04:44:10.197 に答える
5

マックスの正解に対する私のコメントですでに述べたように:

JXTable(プレーンなJTableと同じ)、デフォルトで、によって返される形式を使用して日付値を形式化しますDateFormat.getInstance()。フォーマットが機能していないように見える場合、それは通常、tableModelの不完全な実装です。特定のタイプのデフォルトのレンダラーは、columnClassがその特定のタイプを返す場合にのみ使用されます。

// in your TableModel, implement getColumnClass
@Override
public Class<?> getColumnClass(int columnIndex) {
    if (columnIndex == myDateColumnIndex) {
        return Date.class;
    }
    ...
}

カスタム形式の日付レンダラーをインストールするには、必要に応じてFormatStringValueを使用してDefaultTableRendererをインスタンス化し、それを使用するようにテーブルに指示します(列ごと、columnClassまたはtableごとに機能し、Dateクラスを返す列に対して機能します)

StringValue sv = new FormatStringValue(new SimpleDateForma("dd-MMMM-yyyy"));
TableCellRenderer r = new DefaultTableRenderer(sv);
// either per-column
table.getColumn(dateColumnIndex).setCellRenderer(r);
// or per-table
table.setDefaultRenderer(Date.class, r);
于 2012-08-06T09:13:38.570 に答える
3

デフォルトのテーブルセルエディタをDateクラスに提供できます(列がを使用していると仮定しますDate

詳細については、 setDefaultEditorを確認してください。

これは少し手間がかかる傾向があるため、JTable.getColumnModel()。getColumn(int).setCellEditor(editor)を使用して、特定のTableColumnに使用するエディターを指定できます。

詳細については、テーブルの使用方法(他のエディターの使用)を確認してください。

于 2012-08-06T04:43:20.677 に答える
0

テーブルに「テーブル エディター」を追加することで、DatePicker を JTable (または JXTable) に追加できます。テーブル エディタは、「javax.swing.table.TableCellEditor」インターフェイスを実装する任意のクラスです。上記のようにJXDatePicker コンポーネントを使用するか、ここに示すようにLGoodDatePickerライブラリを使用してこれを行うことができます。(これは、同じ問題の代替ソリューションです。)

公正な開示: 私は LGoodDatePicker の主要な開発者です。

LGoodDatePicker ライブラリには、3 つのTableEditorクラスが含まれています。これらのクラスにより、プログラマは DatePicker、TimePicker、または DateTimePicker を Swing JTable (または SwingX JXTable) のセルに追加できます。

ピッカー クラスは、通常のスイング パネルや他のスイング コンテナーにも追加できます。

以下は、JTable に DateTimePicker を追加する方法の例です。

// Create a table.
JTable table = new JTable(new DemoTableModel());

// Add the DateTimeTableEditor as the default editor and renderer for
// the LocalDateTime data type.
table.setDefaultEditor(LocalDateTime.class, new DateTimeTableEditor());
table.setDefaultRenderer(LocalDateTime.class, new DateTimeTableEditor());

// Explicitly set the default editor and renderer for column index 0.
TableColumn column = table.getColumnModel().getColumn(0);
column.setCellEditor(table.getDefaultEditor(LocalDateTime.class));
column.setCellRenderer(table.getDefaultRenderer(LocalDateTime.class));

これは、テーブル エディタの使用方法に関する Oracle のチュートリアルです。

テーブル エディターのデモ、ピッカー コンポーネント、完全なデモのスクリーンショットを以下に貼り付けました。LGoodDatePicker ライブラリには、テーブル エディター用の別のデモが含まれていることに注意してください。これは、「LGoodDatePicker/Project/src/main/java/com/github/lgooddatepicker/demo/TableEditorsDemo.java」フォルダーの下のリポジトリにあります。

ライブラリは、プロジェクトのリリース ページから Java プロジェクトにインストールできます。

プロジェクトのホームページは、
https ://github.com/LGoodDatePicker/LGoodDatePicker の Github にあります。

. テーブル エディターのデモのスクリーンショット

Date and TimePicker のスクリーンショット

完全なデモのスクリーンショット

于 2016-07-01T00:49:52.297 に答える