【问题标题】:Auto Populate a jTextField with NetBeans使用 NetBeans 自动填充 jTextField
【发布时间】:2011-05-06 22:03:31
【问题描述】:

我使用 NetBeans 创建了一个 jFrame,当单击主 GUI 上的按钮以添加新条目时,它会打开。我想知道是否有一种方法可以为显示 jFrame 表单时显示的每个新条目提供唯一的 id。除了唯一的 id,我还希望创建一个文本字段 createdOn 自动填充当前日期。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    在JVM执行程序的整个生命周期中,hashCode()可以作为一个唯一的ID; UUID 是另一种选择。该示例在每次按下按钮时显示一个新的Date

    附录:经过仔细审查,java.util.DatehashCode() 方法可能不是唯一的。特别是,“要求如果两个对象根据 equals(java.lang.Object) 方法不相等,则对两个对象中的每一个调用 hashCode 方法必须产生不同的整数结果。”您也许可以使用getTime() 中的long,但分辨率为一毫秒。

    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();
                }
            });
        }
    }
    

    【讨论】:

    • 请注意,Date 的连续值最多可以相隔一毫秒。
    • 谢谢。我现在不在我的代码面前。当我回到家时,我会进一步研究这个。看来它会起作用。
    • 正如here 所讨论的,repaint()revalidate() 之后可能是必要的。
    猜你喜欢
    • 1970-01-01
    • 2018-11-19
    • 2012-06-06
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2016-04-21
    • 2012-12-14
    相关资源
    最近更新 更多