JDateChooser 구성 요소에서 날짜를 입력하고 입력 한 날짜까지의 일 수를 계산하는 작은 프로그램이 있습니다. MVC 패턴을 사용하고 Netbeans IDE에서 코딩되었으며 올바른 일 수를 계산하지만 JLabel 인 "labelDays"에는 표시하지 않습니다. labelDays.setText ("29")를 입력하면 labelDays.getText()의 값을 가져 와서 올바른 일 수를 검색하고 strDays는 정확하지만 레이블에 업데이트 된 내용이 표시되지 않습니다. 값. 다음은 샘플 코드입니다.JLabel setText는 업데이트되지 않지만 getText는 올바른 값을 반환합니다.
model:
public class CountDownModel {
public LocalDate getCurrentDate() {
return LocalDate.now();
}
public long getDays(LocalDate futureDate) {
long daysBetween = DAYS.between(LocalDate.now(), futureDate);
if(daysBetween <= 0) {
return 0;
}
return daysBetween;
}
view:
public class CountDownView extends javax.swing.JFrame {
...
private CountDownController controller = new CountDownController();
public CountDownView() {
initComponents();
Date input = new Date();
Instant instant = input.toInstant();
Date output = Date.from(instant);
future_date.setDate(output);
}
private void button_calculateMouseClicked(java.awt.event.MouseEvent evt) {
Date futureDate;
futureDate = future_date.getDate();
String strDate = DateFormat.getDateInstance().format(futureDate);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy");
LocalDate localDate = LocalDate.parse(strDate, formatter);
controller.setDays(localDate);
}
...
public void setDays(long days) {
String strDays = String.valueOf(days);
System.out.print("strDays:");
System.out.println(strDays);
String oldValue = labelDays.getText();
labelDays.setText(strDays);
labelDays.paintImmediately(labelDays.getVisibleRect());
String newValue = labelDays.getText();
System.out.print("oldValue:");
System.out.println(oldValue);
System.out.print("newValue:");
System.out.println(newValue);
System.out.println("================");
}
}
controller:
public class CountDownController {
public void startApplication() {
CountDownView view = new CountDownView();
view.setDays(0);
view.setVisible(true);
}
public void setDays(LocalDate futureDate) {
CountDownModel model = new CountDownModel();
CountDownView view = new CountDownView();
long longDays = model.getDays(futureDate);
if(longDays <= 0) {
longDays = 0;
}
view.setDays(longDays);
}
}
main:
public class DateCountDown {
public static void main(String[] args) {
// TODO code application logic here
CountDownController controller = new CountDownController();
controller.startApplication();
}
}
Output:
run:
strDays:0
oldValue:200
newValue:0
================
strDays:28
oldValue:200
newValue:28
================
감사합니다. 작동하게하려면 어떻게해야합니까? 추신 : 내 오류가 내가 설정 한 MVC 때문인지 궁금합니다.
필립
paintImmediately 및 oldValue 변수가 추가되었습니다. 아직 라벨을 업데이트하지 않습니다. –
@ philip-stephens,이 레이블은 언제든지 텍스트를 나중에 업데이트합니까? 아니면 항상 동일한 값을 유지합니까? – arcquim
함수 내에서 명시 적으로 설정하지 않으면 항상 0이 표시됩니다. –