私はJTableを使用しています。そこに Date 列があり、セルをクリックすると JXDatePicker が表示され、そこから日付を選択できるようにする必要があります。
誰かがこれを行う方法を教えてもらえますか?
ありがとう!答えを待っている..
私はJTableを使用しています。そこに Date 列があり、セルをクリックすると JXDatePicker が表示され、そこから日付を選択できるようにする必要があります。
誰かがこれを行う方法を教えてもらえますか?
ありがとう!答えを待っている..
おそらく、エディタコンポーネントとしてを使用するを使用する必要DatePickerCellEditor
があります。例えば:CellEditor
JXDatePicker
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();
}
});
}
}
マックスの正解に対する私のコメントですでに述べたように:
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);
デフォルトのテーブルセルエディタをDate
クラスに提供できます(列がを使用していると仮定しますDate
)
詳細については、 setDefaultEditorを確認してください。
これは少し手間がかかる傾向があるため、JTable.getColumnModel()。getColumn(int).setCellEditor(editor)を使用して、特定のTableColumnに使用するエディターを指定できます。
詳細については、テーブルの使用方法(他のエディターの使用)を確認してください。
テーブルに「テーブル エディター」を追加することで、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 にあります。