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();
}
}
}
このエラーが表示されます。だから、それを15ずつ増やすことはできないのですか? – Francisunoxx
@Francisunoxxカスタムインクリメントとデクリメントを実装しようとする場合は、おそらくこのhttps://stackoverflow.com/questions/3090502/how-do-newsへの答えとして述べられているように、独自の 'SpinnerModel'を実装する必要があります。 i-know-if-increment-decrement-on-jspinnerが押されたかどうか?rq = 1 – nullpointer