首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSpinner增长Calendar.MINUTE 15

JSpinner增长Calendar.MINUTE 15
EN

Stack Overflow用户
提问于 2017-08-19 08:29:41
回答 1查看 221关注 0票数 1

我正在尝试使用JSpinner将我的SpinnerDateModel增加15、30和45。我试图在第四个参数( int calendarFieldCalendar.MINUTE + 15 )中传递构造函数中的值,但这甚至给了我int字段。

java.lang.IllegalArgumentException:无效calendarField

下面是可跑的课程。

代码语言:javascript
复制
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();
    }
}
}
EN

回答 1

Stack Overflow用户

发布于 2017-08-19 09:08:34

有关无效calendarField的详细信息在SpinnerDateModel.class中进行如下操作:

代码语言:javascript
复制
if (!calendarFieldOK(calendarField)) {
    throw new IllegalArgumentException("invalid calendarField");
}

它的执行情况如下:

代码语言:javascript
复制
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;
}

我希望这解释了你得到的例外。因为在实现中不存在27(MINUTE+15)的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45769437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档