В течение жизни JVM, выполняющей программу, hashCode()
может служить уникальным идентификатором; UUID
является альтернативой. Пример показывает новый Date
каждый раз, когда нажимается кнопка.
Приложение: При ближайшем рассмотрении метод hashCode()
для java.util.Date
может быть не уникальным. В частности, « не требуется, чтобы, если два объекта были неравны согласно методу equals (java.lang.Object), то вызов метода hashCode
для каждого из двух объектов должен давать различное целое Результаты." Вы можете использовать long
из getTime()
с разрешением в одну миллисекунду.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/** @see http://stackoverflow.com/questions/4128432 */
public class AddTest extends JPanel {
private static final DateFormat format =
new SimpleDateFormat("yyyy-MMM-dd hh:mm:ss.SSS");
private final List<TestPanel> panels = new ArrayList<TestPanel>();
public AddTest() {
this.setLayout(new GridLayout(0, 1));
TestPanel tp = new TestPanel();
panels.add(tp);
this.add(tp);
this.validate();
Dimension d = tp.getPreferredSize();
this.setPreferredSize(new Dimension(d.width, d.height * 8));
}
private static class TestPanel extends JPanel {
public TestPanel() {
Date date = new Date();
this.add(new JLabel(String.valueOf(date.hashCode())));
this.add(new JTextField(format.format(date)));
}
}
private void display() {
JFrame f = new JFrame("AddTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this, BorderLayout.CENTER);
JButton button = new JButton(new AbstractAction("New") {
@Override
public void actionPerformed(ActionEvent e) {
TestPanel tp = new TestPanel();
panels.add(tp);
AddTest.this.add(tp);
AddTest.this.revalidate();
AddTest.this.repaint(); // may be required
}
});
f.add(button, BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new AddTest().display();
}
});
}
}