Play Pumps 1
This is a really cool idea (and not at all what you’d expect to find on a website called Play Pumps)! It’s a kid’s roundabout that also acts as a pump for a fresh water well. They’re definitely getting some cash from me.
This is a really cool idea (and not at all what you’d expect to find on a website called Play Pumps)! It’s a kid’s roundabout that also acts as a pump for a fresh water well. They’re definitely getting some cash from me.
I’ve noticed a neat feature in Path Finder where it changes the date format used to display time stamps in the main table based on the width of the column. In RvSnoop I was allowing the user to set a preferred format as a configuration option, but this seems much better.
It turns out that this is pretty easy to achieve in Java, just use the following class:
public class DateCellRenderer extends DefaultTableCellRenderer { // Or load these from a user preference... private static final DateFormat[] dateFormats = { new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"), new SimpleDateFormat("yy-MM-dd HH:mm:ss.SSS"), new SimpleDateFormat("MM/dd HH:mm:ss.SSS"), new SimpleDateFormat("HH:mm:ss.SSS"), new SimpleDateFormat("HH:mm:ss.SS"), new SimpleDateFormat("HH:mm:ss.S"), new SimpleDateFormat("HH:mm:ss"), new SimpleDateFormat("HH:mm") }; private int currentWidth; private Font currentFont; private DateFormat currentFormat; private final Date date = new Date(); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { DateFormat format = getFormat(table.getColumnModel().getColumn(col).getWidth(), table); String displayed = value != null ? format.format((Date) value) : ""; return super.getTableCellRendererComponent(table, displayed, isSelected, hasFocus, row, col); } private DateFormat getFormat(int width, JTable table) { Font font = table.getFont(); if (currentWidth == width && currentFormat != null && font.equals(currentFont)) { return currentFormat; } currentWidth = width; currentFont = font; FontMetrics metrics = table.getFontMetrics(font); date.setTime(System.currentTimeMillis()) for (DateFormat df : dateFormats) { if (metrics.stringWidth(df.format(date)) < width) { currentFormat = df; return df; } } } currentFormat = dateFormats[dateFormats.length - 1]; return currentFormat; } }
You will need to register it with your JTable via myTable.getColumnModel().getColumn(0).setCellRenderer(myRenderer); and away you go. You can have more or less format options by altering the static array in the class.
I’ve taken over pretty much all of the development of the rvSnoop utility now, the first major new release has been put out today with a number of changes in it. Here, briefly, are the plans for the next few versions:
I’ll have more plans once I get to know the code a little better.