2013-05-09 54 views
0

我試圖做一個JSpinner的(含分/秒定時器)工作了一堆集多功能於他們-方式鄉親誰不關心鼠標咖啡豆,但希望每個擊鍵都能完成他們習慣的操作。它的工作原理與我想要的一樣,但最後一英里是最難的。HOWTO選擇JSpinner的日期字段集中

這意味着在實踐中是微調的外觀和行爲時,它的文本字段收益一個重點,正是因爲它的外觀和用戶按下方向鍵從這些領域中的一個之後表現。

微調的建立如下:

this.countdown = new JSpinner(this.model); 
this.editor = new JSpinner.DateEditor(countdown, "m:ss"); 
JFormattedTextField textField = editor.getTextField(); 

步驟1當我的微調出現,它看起來是這樣的: ( '|' 指示插入符,大膽表示selction)

| 1 :00
(沒有被選中)

步驟2。如果向上箭頭就是從這裏 按下它看起來像這樣:

|:00
(2分鐘字段中選擇)

步驟3.如果右箭頭就是從這裏按我們得到:

2:| 00
(沒有被選中)

步驟4.如果向上箭頭是從這裏按我們得到

2: |
(秒字段01被選中)

我想它在所有這些情況下工作,因爲它在步驟2和4確實當獲得焦點的子場中的一個,它應該被選中。

有沒有辦法做到這一點?

回答

3

也許你可以使用的FocusListener。

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class SpinnerFocusTest { 
    private static final String PATTERN = "m:ss"; 
    public JComponent makeUI() { 
    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(60*1000); 
    Date value = c.getTime(); 

    SpinnerDateModel m = new SpinnerDateModel(
     value, null, null, Calendar.MINUTE); 

    JSpinner sp1 = new JSpinner(m); 
    sp1.setEditor(new JSpinner.DateEditor(sp1, PATTERN)); 

    JSpinner sp2 = new JSpinner(m); 
    final JSpinner.DateEditor editor = 
     new JSpinner.DateEditor(sp2, PATTERN); 
    sp2.setEditor(editor); 
    editor.getTextField().addFocusListener(new FocusAdapter() { 
     @Override public void focusGained(FocusEvent e) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override public void run() { 
      JTextField f = editor.getTextField(); 
      int i = f.getText().lastIndexOf(":"); 
      f.select(i+1, i+3); 
      } 
     }); 
     } 
    }); 

    JPanel p = new JPanel(new GridLayout(2,1,5,5)); 
    p.add(sp1); 
    p.add(sp2); 
    JPanel panel = new JPanel(new BorderLayout()); 
    panel.add(p, BorderLayout.NORTH); 
    panel.setBorder(BorderFactory.createEmptyBorder(8,8,8,8)); 
    return panel; 
    } 
    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override public void run() { 
     createAndShowGUI(); 
     } 
    }); 
    } 
    public static void createAndShowGUI() { 
    JFrame f = new JFrame(""); 
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    f.getContentPane().add(new SpinnerFocusTest().makeUI()); 
    f.setSize(320, 240); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    } 
} 
相關問題