2017-08-19 6 views
1

SpinnerDateModelを使用してJSpinnerを15,30、および45ずつ増やそうとしています。私はCalendar.MINUTE + 15としてint calendarFieldとしてコンストラクタの値を渡そうとしましたが、これは私にもフィールドがintとなっています。JSpinner Increment Calendar.MINUTE by 15

java.lang.IllegalArgumentExceptionが:無効calendarFieldは

以下のRunnableクラス。

if (!calendarFieldOK(calendarField)) { 
    throw new IllegalArgumentException("invalid calendarField"); 
} 

とどのようにその実装を持っている:私はそれを説明願ってい

switch(calendarField) { 
    case Calendar.ERA: 
    case Calendar.YEAR: 
    case Calendar.MONTH: 
    case Calendar.WEEK_OF_YEAR: 
    case Calendar.WEEK_OF_MONTH: 
    case Calendar.DAY_OF_MONTH: 
    case Calendar.DAY_OF_YEAR: 
    case Calendar.DAY_OF_WEEK: 
    case Calendar.DAY_OF_WEEK_IN_MONTH: 
    case Calendar.AM_PM: 
    case Calendar.HOUR: 
    case Calendar.HOUR_OF_DAY: 
    case Calendar.MINUTE: 
    case Calendar.SECOND: 
    case Calendar.MILLISECOND: 
     return true; 
    default: 
     return false; 
} 

import java.awt.Component; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import javax.swing.DefaultCellEditor; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSpinner; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.SpinnerDateModel; 
import javax.swing.table.TableColumn; 
import javax.swing.table.TableColumnModel; 


public class Spinner extends JPanel 
{ 
static String[] columnNames = { 
    "Value" 
}; 
static Object[][] data = { 
    {"07:00 AM"} 
}; 
public static void main(String[] args) throws ParseException { 
    JFrame frame = new JFrame(); 
    JTable table = new JTable(data,columnNames); 

    TableColumnModel tcm = table.getColumnModel(); 
    TableColumn tc = tcm.getColumn(0); 
    tc.setCellEditor(new NewClass.SpEditor()); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(table); 
    frame.pack(); 
    frame.setVisible(true); 
} 


private static class SpEditor extends DefaultCellEditor 
{ 
    JSpinner spinner; 
    JSpinner.DefaultEditor editor; 
    JTextField textField; 

    SimpleDateFormat date = new SimpleDateFormat("hh:mm a"); 

    public SpEditor() throws ParseException 
    { 
     super(new JTextField()); 
     spinner = new JSpinner(); 
     spinner.setModel(new SpinnerDateModel(date.parse("07:00 AM"), date.parse("07:00 AM"), date.parse("07:00 PM"), Calendar.MINUTE + 15)); 
     spinner.setEditor(new JSpinner.DateEditor(spinner, "hh:mm a")); 
     editor = ((JSpinner.DateEditor)spinner.getEditor()); 
     textField = editor.getTextField(); 


    } 
    // Prepares the spinner component and returns it. 
    public Component getTableCellEditorComponent(
     JTable table, Object value, boolean isSelected, int row, int column 
    ) { 
     return spinner; 
    } 

    // Returns the spinners current value. 
    @Override 
    public Object getCellEditorValue() { 
     return spinner.getValue(); 
    } 
} 
} 

答えて

1

詳細無効calendarFieldはについては、このないSpinnerDateModel.class内にありますあなたが得ている例外。実装には27(MINUTE + 15)の大文字と小文字はありません。

+1

このエラーが表示されます。だから、それを15ずつ増やすことはできないのですか? – Francisunoxx

+0

@Francisunoxxカスタムインクリメントとデクリメントを実装しようとする場合は、おそらくこのhttps://stackoverflow.com/questions/3090502/how-do-newsへの答えとして述べられているように、独自の 'SpinnerModel'を実装する必要があります。 i-know-if-increment-decrement-on-jspinnerが押されたかどうか?rq = 1 – nullpointer