Java 在JTable列中设置JXDatePicker的最小日期
如何在我的JTable列中设置JXDatePicker的最小日期。也就是说,我需要在JXDatePicker中只显示/启用大于当前日期的日期,日历中应清除当前日期以下的日期,以便用户无法选择这些日期。如何做?请帮助我。下面是我的代码Java 在JTable列中设置JXDatePicker的最小日期,java,swing,jtable,swingx,Java,Swing,Jtable,Swingx,如何在我的JTable列中设置JXDatePicker的最小日期。也就是说,我需要在JXDatePicker中只显示/启用大于当前日期的日期,日历中应清除当前日期以下的日期,以便用户无法选择这些日期。如何做?请帮助我。下面是我的代码 import java.util.Date; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.Swin
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 TableWithDate {
private static void createAndShowGUI() {
JFrame frame = new JFrame("TableWithDate");
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();
}
});
}
}
JXDatePicker
字段具有protected
访问权限,您必须扩展DatePickerCellEditor
并提供该功能
public class BoundDatePickerCellEditor extends DatePickerCellEditor {
public BoundDatePickerCellEditor() {
super();
}
public BoundDatePickerCellEditor(DateFormat dateFormat) {
super(dateFormat);
}
public void setLowerBound(Date date) {
datePicker.getMonthView().setLowerBound(date);
}
public void setUpperBound(Date date) {
datePicker.getMonthView().setLowerBound(date);
}
}
可运行示例…
import java.awt.EventQueue;
import java.text.DateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.TableColumn;
import org.jdesktop.swingx.table.DatePickerCellEditor;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JTable table = new JTable(new Object[][]{{"1", new Date()}},
new Object[]{"Id", "Time"});
TableColumn dateColumn = table.getColumnModel().getColumn(1);
BoundDatePickerCellEditor picker = new BoundDatePickerCellEditor();
picker.setLowerBound(new Date());
dateColumn.setCellEditor(picker);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class BoundDatePickerCellEditor extends DatePickerCellEditor {
public BoundDatePickerCellEditor() {
super();
}
public BoundDatePickerCellEditor(DateFormat dateFormat) {
super(dateFormat);
}
public void setLowerBound(Date date) {
datePicker.getMonthView().setLowerBound(date);
}
public void setUpperBound(Date date) {
datePicker.getMonthView().setLowerBound(date);
}
}
}
如果你想排除今天,你可以使用类似
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
picker.setLowerBound(cal.getTime());
…例如,JXDatePicker字段具有
受保护的
访问权限,您必须扩展DatePickerCellEditor
并提供该功能…我如何做到这一点…请给我一个示例,我如何访问该类?就像您访问任何类一样,dateColumn.setCellEditor(new BoundDatePickerCellEditor())代码>-在had中有了这些基本概念之前,您可能需要重新考虑对UI进行编码,因为这基本上是您在GUI中的谋生手段如果我在我的类表中定义这个类,并且它显示一些错误,因此,我在我的类之外创建了一个this类,它不会禁用小于当前日期的日期,这可能是因为您的createAndShowGUI
是static
,并且您将内部类定义为notstatic
,我个人会将其作为一个外部类。“它不会禁用小于当前日期的日期”-这可能是因为您没有告诉它,您需要相应地设置lowerBound
属性…哦,是的,这是静态类问题的bcs。这就是为什么我问您如何访问您的类。