【问题标题】:Format JTable Cell格式化 JTable 单元格
【发布时间】:2016-06-26 03:02:21
【问题描述】:

我有一个 JTable 6 列,第 1 列和第 2 列单元格有 JDateChooserCellEditor(),我得到以下值,例如 2016 年 3 月 11 日,2016 年 3 月 12 日。但我想格式化 JDateChooserCellEditor() 以显示类似2016 年 3 月 11 日 HH:mm 和 2016 年 3 月 12 日 HH:mm。我的第三个单元格必须给出时间差异的结果。24 小时。我的 JTable 看起来像这样。请看图片和代码。

  // column 1---
TableColumn col1=DailyTbl.getColumnModel().getColumn(1);
col1.setPreferredWidth(150);
DailyTbl.setDefaultEditor(java.util.Date.class, new JDateChooserCellEditor());

// Column 2------

TableColumn col1=DailyTbl.getColumnModel().getColumn(1);
col1.setPreferredWidth(150);
DailyTbl.setDefaultEditor(java.util.Date.class, new JDateChooserCellEditor()); 

【问题讨论】:

  • 基于com.toedter.calendar.JDateChooserCellEditor 的源代码,我建议他们不希望您这样做,因为JDateChooserprivate,并且没有提供其他“真实”方法来访问它。您可以调用它的getTableCellEditorComponent 并将其转换为JDateChooser,但这对我来说似乎......丑陋。

标签: java swing jtable tablecelleditor jdatechooser


【解决方案1】:

基于我在此链接中找到的一些代码:http://grepcode.com/file/repo1.maven.org/maven2/com.luuuis/jcalendar-tz/1.3.3-3/com/toedter/calendar/JDateChooser.java

我发现一条评论建议您可以通过以下方式做您想做的事情:

dateChooser.setDateFormatString("yyyy-MM-dd HH:mm");

也许这只会改变渲染器,而不是编辑器。我不知道,因为我从来没有使用过这个类。

【讨论】:

  • 这可能是真的,但是JDateChooserCellEditor 不提供对组件的直接访问,所以我们只能使用反射 (:P),调用 getTableCellEditorComponent 并转换结果 (:P ) 或者基本上是我们自己的......我真的不喜欢那个 API :P
  • 你能进一步解释一下如何在代码中实现吗?还是有其他任何解决方案可以像这样将下一个单元格格式化为 00:00?
  • @akathir79,它的一行代码。我不知道它是否符合您的要求,因为我以前从未使用过这个类。您可以尝试一下,看看会发生什么。
【解决方案2】:

找到格式化JDateChooserCellEditor()的答案

enter code here
public class JDateChooserCellEditor1 extends AbstractCellEditor implements
    TableCellEditor {

private static final long serialVersionUID = 917881575221755609L;

private JDateChooser dateChooser = new JDateChooser();

public Component getTableCellEditorComponent(JTable table, Object value,
        boolean isSelected, int row, int column) {

    Date date = null;
    if (value instanceof Date)
        date = (Date) value;

    dateChooser.setDate(date);
            dateChooser.setDateFormatString("yyyy-MM-dd HH:mm");
    return dateChooser;
}

public Object getCellEditorValue() {
    return dateChooser.getDate();
}
}

//和TableCellRender

    class DateRenderer implements TableCellRenderer
    {

@Override
     public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {

    JPanel c = new JPanel();
      //JTextField c=new JTextField();
    if (value instanceof Date)
    {


        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");

        c.add(new JLabel(dateFormat.format(value)));
        c.setOpaque(true);


    }

    return c;
}

}

//最终调用类

  TableColumn col1=DailydatasTbl.getColumnModel().getColumn(1);
  col1.setPreferredWidth(200);
  Table.setDefaultEditor(java.util.Date.class, new JDateChooserCellEditor1());
   Table.getColumnModel().getColumn(1).setCellRenderer(new  DateRenderer());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多