【问题标题】:How to set focus on JDateChooser when frame is loaded in Swing?在 Swing 中加载框架时如何将焦点设置在 JDateChooser 上?
【发布时间】:2014-01-23 14:04:06
【问题描述】:

加载框架时如何在日期选择器上显示焦点?

  1. 如何验证用户只能输入日期格式的文本字段和
  2. 如何将焦点设置在摇摆中的 jdatechooser 图标上。

代码

private void jDateChooser2FocusGained(java.awt.event.FocusEvent evt) {
    // TODO add your handling code here:
        //JDateChooser2 jdc = new JDateChooser2("DD/MM/YYYY", true);
    //jDateChooser2.getDateEditor().getUiComponent().requestFocusInWindow();
  jDateChooser2.requestFocusInWindow();

}      

源代码

public class welcome extends javax.swing.JFrame {

    public static final String DATE_FORMAT_NOW = "dd/MMM/YYYY ";
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
    Date date = new Date();



    /**
     * Creates new form welcome
     */
    public welcome() {
        initComponents();



         sdf.setLenient(false);

         String dt = sdf.format(cal.getTime());
         System.out.println(dt);


            try  
            {  
                date = sdf.parse(dt); 
                 System.out.println(date);
            }  
            catch(ParseException pe)  
            {  
                System.out.println("pe: " + pe.getMessage());  
                Toolkit.getDefaultToolkit().beep();  
            }  
            jLabel3.setText(dt);
            jTextField1.setText(dt);
     }

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       
        // TODO add your handling code here:
   //   System.out.println("guihgio");
      if (evt.getKeyCode() == KeyEvent.VK_ENTER) {

            System.out.println("enter press key");


              this code is not working//

      char c = evt.getKeyChar();
      if (!((c >= '0') && (c <= '9') ||
         (c == KeyEvent.VK_BACK_SPACE) ||
         (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_SLASH)))        
      {

           JOptionPane.showMessageDialog(null, "Please Enter Valid");
           evt.consume();
      }
  }

我的事件代码 private void jSpinner1KeyPressed(java.awt.event.KeyEvent evt) {
// TODO 在此处添加您的处理代码: System.out.println("spiinejngyjgkur");

     if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        //password pwd = new password();
        //pwd.setVisible(true);










     jSpinner1.requestFocus();

       if (evt.getSource() == jSpinner1) //add
    {
        try {
            String host = "jdbc:mysql://localhost:3306/indospirit";
            String uName = "root";
            String uPass = "paras123";

            //Class.forName("com.mysql.jdbc.Driver").newInstance();
            java.sql.Driver d = new com.mysql.jdbc.Driver();

            Connection con = DriverManager.getConnection(host, uName, uPass);

            PreparedStatement ps;
                System.out.println("weww");

      ps = con.prepareStatement("INSERT INTO `log1`(`date`)VALUES('" + dateString + "')");

            int i = ps.executeUpdate();

            if (i > 0) {
                JOptionPane.showMessageDialog(null, "Record Added");
            } else {
                JOptionPane.showMessageDialog(null, "Record NOT Added");
            }
        } catch (SQLException ex) {
            //ex.printStackTrace();
            System.err.println(ex.toString());
        } catch (Exception ex1) {
            //ex1.printStackTrace();
            System.err.println(ex1.toString());
        }
    }

    try {
        String host = "jdbc:mysql://localhost:3306/indospirit";
        String uName = "root";
        String uPass = "paras123";

        //Class.forName("com.mysql.jdbc.Driver").newInstance();
        java.sql.Driver d = new com.mysql.jdbc.Driver();

        Connection con = DriverManager.getConnection(host, uName, uPass);
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * from `log1` ORDER BY `date` DESC limit 1");

        while (rs.next()) {

            int col = rs.getInt("id");
            String str = rs.getString("date");

            jLabel10.setText(str);

            System.out.println(col + " " + str + " ");

        }

    } catch (SQLException ex) {
        System.err.println(ex.toString());
    } catch (Exception ex1) {
        System.err.println(ex1.toString());
    }

         } 


        event not working

私有 void jSpinner1StateChanged(javax.swing.event.ChangeEvent evt) {
// TODO 在此处添加您的处理代码: System.out.println("gijjhbip"); System.out.println("来源:" + evt.getSource()); }

     how could  I check THAT date Enterd by user in date format in JFormattedTextField...please help  IN KEY PRESSED EVENT

       my code is here

私人无效 jFormattedTextField1KeyPressed(java.awt.event.KeyEvent evt) {
// TODO 在此处添加您的处理代码:

    System.out.println(evt.getKeyChar());

   if (evt.getKeyCode() == KeyEvent.VK_ENTER) {

       Date date = (Date) evt.getSource();
      if(!(date.equals(format)))
      {
          evt.consume();
      }
   }

【问题讨论】:

  • 一旦获得焦点就没有必要再请求焦点了。
  • 我应该使用什么事件,以便我可以用来点击我尝试过但没有成功的日期选择器图标
  • 能否请您向我发送问题代码,我该如何验证文本字段
  • 也许这个可以帮助stackoverflow.com/questions/8615958/…
  • jDateChooser2.requestFocusInWindow();无法专注于日期选择器图标

标签: java swing jdatechooser


【解决方案1】:

"如何验证用户只能输入日期格式的文本字段和"

恕我直言,获取用户输入的日期是不同的坏主意。验证输入将成为一个令人头疼的问题并且对程序来说效率低下,因为用户可以输入任何字符组合。相反,您可以使用 JSpinner 使用 DateListModel

Spinner tutorial | SpinnerDateModel javadoc


但话又说回来,为什么还要允许输入今天的日期呢?除了从用户那里获取输入之外,可以通过多种方式检索该数据。


如果您真的坚持按照自己的方式进行,通过文本字段输入并想要验证,您总是可以抓住ParseException。但在这种情况下,您需要向用户准确指定需要输入的格式,并在用户输入的格式不正确或不是真实日期时发出某种通知。

SimpleDateFormat formatter = new SimplDateFormat(DATE_FORMAT_NOW);
String dateString = textField.getText();
Date date;
try {
    date = formatter.parse(dateString);
} catch (ParseException) {
    statusLabel.setText("Please enter a valid date");
    // or JOptionPane.showMessageDialog(null, "Please Enter a valid Date");
}

但另一个问题是用户可以输入随机日期,例如 2102 年的某个日期。所以我建议使用 JSpinner 或仅显示今天日期的不可编辑的文本字段。


更新试试这个

导入 java.util.Date; 导入 java.text.SimpleDateFormat; 导入 javax.swing.*;

public class SpinnerDateTest {

    public static void main(String[] args) {
        Date date = new Date();
        JSpinner spinner = new JSpinner();
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM//yyyy");
        String dateString = formatter.format(date);
        spinner.setModel(new SpinnerListModel(new String[]{dateString}));
        JOptionPane.showConfirmDialog(null, spinner, "Spinner:"
                ,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

    }
}

或使用SpinnerDateModel

public static void main(String[] args) {
    Date date = new Date();
    JSpinner spinner = new JSpinner();
    spinner.setModel(new SpinnerDateModel(date, null, null, Calendar.DAY_OF_WEEK));
    JOptionPane.showConfirmDialog(null, spinner, "Spinner:"
            ,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

}

【讨论】:

  • 如果我专注于日期选择器,请解释第二个问题,我可以从日历中选择日期。我可以轻松解决问题。
  • 对不起,我从来没有用过JDateChooser,所以我不知道它是如何工作的。
  • 请给我发送 SPINNER 的当前日期代码,请我是 Spinner 的新手
  • SpinnerModel snd = new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_MONTH); JSpinner spnDate = new JSpinner(snd);
  • 如何添加微调器标签请帮助。如果使用 NETBAENS 错误添加到 SPIINER CALSS OBJ IM:未知符号错误。
【解决方案2】:

我不知道你用的是什么库,但为什么不试试这个jcalendar

第一个问题: 您可以使用 JFormattedTextField,代替 JTextField。

DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); DateFormatter formatter = new DateFormatter(format); format.setLenient(false); formatter.setAllowsInvalid(false); formatter.setOverwriteMode(true); JFormattedTextField formattedTextField = new JFormattedTextField(formatter); formattedTextField.setValue(new Date()); formattedTextField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent evt) { //System.out.println(evt.getKeyChar()); //TODO } });

第二个问题: getFocuse 的唯一方法是更改​​ JDateChoose 的源代码; 因为源代码是



    protected JButton calendarButton;
    ...
    calendarButton = new JButton(icon) {

        public boolean isFocusable() {
            return false;
        }
    };

【讨论】:

  • 加载框架时如何在图标日期选择器上设置焦点
  • 谁能回答第二个问题。我如何验证文本字段的日期格式...
  • 如何检查用户在 JFormattedTextField 中以日期格式输入的日期...请帮助!!!
【解决方案3】:

你可以用它来聚焦

jDateChooser.getDateEditor().getUiComponent().requestFocusInWindow();

如果你想控制一些事件

jDateChooser.getDateEditor().getUiComponent().addKeyListener(new listenerClass());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 2011-03-23
    • 2011-03-04
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多