2014-01-06 45 views
0

enter image description here如何在Swing中加載框架時將焦點放在JDateChooser上?

如何在加載幀時顯示日期選擇器上的焦點?

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

我的事件代碼私人無效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 

私人無效jSpinner1StateChanged(javax.swing.event.ChangeEvent EVT){
// TODO添加處理代碼在這裏: 的System.out.println( 「gijjhbip」); System.out.println(「Source:」+ 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(); 
     } 
    } 
+0

在這裏你可以使用這個焦點

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

是我的代碼 – user2818060

+0

還有的沒有要求一旦獲得焦點,就會聚焦焦點。 – MadProgrammer

+0

我應該使用什麼事件,以便我可以用來點擊datechooser圖標我已經嘗試過但沒有成功 – user2818060

回答

0

我不知道你用什麼庫,但爲什麼不試試這個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; 
     } 
    }; 

+1

我怎麼能設置圖標日期選擇框上的foucs當框架加載 – user2818060

+0

任何人都可以給第二個問題的答案。我怎麼能驗證textfield日期格式... – user2818060

+0

如何檢查日期格式在JFormattedTextField中的用戶輸入日期...請幫助!!!! – user2818060

1

"how could verify textfield that user can enter only date format and "

恕我直言,獲取用戶輸入的日期是改變糟糕的主意。驗證輸入將變得頭痛,並且對於程序來說效率低下,因爲用戶可以輸入任何字符的組合。相反,您可以使用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或只顯示當天日期的不可編輯的文本字段。


UPDATE試試這個

進口java.util.Date; import java.text.SimpleDateFormat; import 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); 

} 
+0

和請解釋第二個問題,如果我專注於datechooser我可以從calenader選擇日期。我可以輕鬆解決問題。 – user2818060

+0

對不起,但我從來沒有使用'JDateChooser',所以我不知道它是如何工作的。 –

+0

COULD,請給我當前日期CODE FOR SPINNER請即時新BIE到微調器 – user2818060

0

如果你想控制的一些事件

jDateChooser.getDateEditor().getUiComponent().addKeyListener(new listenerClass()); 
相關問題