我有一个Java任务,我们必须使用MVC设计模式创建一个足够简单的世界时钟应用程序。
该应用程序涉及允许用户同时在屏幕上多次查看(或时钟)。他们从一系列城市中创建的Jlist中选择这些时钟(它们的相关时差用逗号分隔,例如。" Barcelona,+ 1.0"然后按一个添加按钮显示时钟/时钟对于这些城市。还有一个删除城市按钮,其工作方式与添加按钮相同,但显然不会显示时钟。时钟和城市显示在两侧是Jscroll窗格。
我正在努力解决一些事情。
我还不确定创建多个时钟的最佳方法?我试过循环,但这里遇到的问题是我用来创建一个时钟的代码。
myClock = new JTextField(8);
myClock.setFont(font);
myClock.setEditable(false);
myClock.setFocusable(false);
myClock.setHorizontalAlignment(JTextField.CENTER);
myClock.setBorder(BorderFactory.createTitledBorder(lineBorder, "City"));
clockPanel.add(myClock);
然后使用此方法更新时钟时间。
public void update() {
myClock.setText(secondsAsTimeText(model.currentTime()));
}
任何帮助都将非常感谢我已经为此工作了三天而且一直没有。如果我不清楚,请让我详细说明。我也是筹码溢出的新人,所以我希望我在问题上没有犯任何新手错误。不要害怕打电话给我,这样我就能从错误中吸取教训:)
答案 0 :(得分:1)
我的建议:
将差异时间存储在地图(城市名称,diffthecurrenttime)中,例如,如果您居住在伦敦并且您需要当时的纽约市时间(NewYourk,-5)并且您放置了所有密钥及其当模型通过加载属性文件初始化时的值,并且当您要添加或删除城市时不必重写模型类。
当视图开始时获取所有城市并放入Jlist(contllorer这样做)
您不必迭代..使用城市名称作为键来查找正确的时间,如下面的示例代码所示。
属性加载部分:
使用.properties ex创建文件。比如configuration.properties,内容应该是这样的:
纽约= -5 东京= 8
并将属性文件放在src文件夹中。
创建一个将从属性文件中加载信息的类文件:
public class PropertiesLoader{
public Map<String,Integer> loadCities(){
Properties file=getProperties("configuration.properties");
return convertPropertiesToMap(file); //it will be return empty Map if unable to load properties
}
private Properties getProperties(String fileName){
Properties prop = new Properties();
InputStream input = null;
try {
input = getClass().getClassLoader().getResourceAsStream(fileName);
if (input == null) {
//Unable to find file
return null;
}
prop.load(input);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return prop;
}
private Map<String,Integer> convertPropertiesToMap(Properties file){
Map<String,Integer> result=new HashMap<String,Integer>();
if(file != null){
Enumeration<?> e = file.propertyNames();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
Integer value = Integer.parseInt(file.getProperty(key));
result.put(key,value);
}
}
return result;
}
}
您必须在模型类中创建PropertiesLoader类,并通过调用loadCities()
方法将信息存储在模型中。
MVC部分: 您的控制器将连接它们:
这是一个示例代码:
public class Controller {
private final View view;
private final Model model;
public Controller(View aview, Model aModel){
this.view=aview;
this.model=amodel;
registerListeners();
}
public void registerListener(){
ActionListener actionListener= new ActionListener(){
public void actionPerformed(ActionEvent e) {
String city=view.getSelectedCity();
view.swithClockToCity(model.getCityTime(city));
}
};
view.addListenerToOkButton(actionListener);
}
}
View类中的某个地方应该是这个
public class View{
private JList cityList;
private JButton selectCityButton;
//other stuff
public String getSelectedCity(){
cityList.getSelectedItem().toString();
}
public void addListenerToOkButton(ActionListener alistener){
selectCityButton.addActionListener(alistener);
}
public void swithClockToCity(Long time){
//change the clock panel or something...
//I put here your code:
myClock.setText(secondsAsTimeText(time));
}
}
您必须以类似的方式编写删除按钮及其操作。 我希望我能帮到你!如果你有排队,请不要犹豫!