2

私の場合、Java カレンダーで日付を無効にするか強調表示したいと考えています。私はJCalendarそれDateChooserComboを行う方法を見つけることができませんでした。最後に、以下のコードを試しましたが、成功しませんでした。

14-09-13例: からまでのすべての日付を無効にしたい23-09-13

DateFormat formatter = new SimpleDateFormat("yyyy-mm-dd");
try {
     Date d1 = formatter.parse("2013-09-14");
     Date d2 = formatter.parse("2013-09-23");
     jCalendar1.setSelectableDateRange(d1, d2);
 } catch (ParseException ex) {
    ex.printStackTrace();
 }
4

1 に答える 1

7

これがしばらく非アクティブだったことは知っていますが、うまくいけば誰かに役立つでしょう. ここで重要なのIDateEvaluatorは、日付が特別か無効かを検証するためのインターフェースを実装することです。残念ながら、JCalendarライブラリで提供される具体的な実装はMinMaxDateEvaluator、クラスである 1 つだけですが、これを出発点とすることはそれほど複雑ではありません。

RangeEvaluator

isInvalid(Date date)以下は実装例です。メソッドには特に注意してください。また、ライブラリDateUtilの一部でもあるクラスを見たいと思うかもしれません。JCalendar

class RangeEvaluator implements IDateEvaluator {

    private DateUtil dateUtil = new DateUtil();

    @Override
    public boolean isSpecial(Date date) {
        return false;
    }

    @Override
    public Color getSpecialForegroundColor() {
        return null;
    }

    @Override
    public Color getSpecialBackroundColor() {
        return null;
    }

    @Override
    public String getSpecialTooltip() {
        return null;
    }
    @Override
    public boolean isInvalid(Date date) {
        return dateUtil.checkDate(date);
        // if the given date is in the range then is invalid
    }        

    /**
     * Sets the initial date in the range to be validated.
     * @param startDate 
     */
    public void setStartDate(Date startDate) {
        dateUtil.setMinSelectableDate(startDate);
    }

    /**
     * @return the initial date in the range to be validated.
     */
    public Date getStartDate() {
        return dateUtil.getMinSelectableDate();
    }

    /**
     * Sets the final date in the range to be validated.
     * @param endDate 
     */
    public void setEndDate(Date endDate) {
        dateUtil.setMaxSelectableDate(endDate);
    }

    /**
     * @return the final date in the range to be validated.
     */
    public Date getEndDate() {
        return dateUtil.getMaxSelectableDate();
    }        
}

RangeEvaluatorクラスの使用

RangeEvaluator以下にクラスの使用例を示します。9 月 14 日から 9 月 23 日までの範囲は無効になっていることに注意してください。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

RangeEvaluator evaluator = new RangeEvaluator();
evaluator.setStartDate(dateFormat.parse("2013-09-14"));
evaluator.setEndDate(dateFormat.parse("2013-09-23"));

JCalendar calendar = new JCalendar(Locale.US);
calendar.getDayChooser().addDateEvaluator(evaluator); // evaluator must be added to a JDayChooser object

スクリーンショット

ここに画像の説明を入力

于 2013-12-24T00:01:32.553 に答える