- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Java 作业,我们必须使用 MVC 设计模式创建一个足够简单的世界时钟应用程序。
该应用程序允许用户在屏幕上同时查看多个时间(或时钟)。他们从一系列城市创建的 Jlist 中选择这些时钟(这些城市的相关时差用逗号分隔,例如“巴塞罗那,+1.0”。然后按添加按钮显示这些城市的时钟/时钟。有还有一个删除城市按钮,其工作方式与添加按钮相同,只是显然会删除显示的时钟。时钟和城市显示在两侧的 Jscroll Pane 中。
我正在努力解决一些问题。
我也不确定创建多个时钟的最佳方法?我尝试了 for 循环,但一直遇到问题,这是我用来创建一个时钟的代码。
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()));
}
任何帮助将不胜感激,我已经为此工作了三天,但一无所获。如果我没有说清楚,请让我详细说明。我也是堆栈溢出的新手,所以我希望我在问题中没有犯任何菜鸟错误。不要害怕批评我,这样我就可以从错误中吸取教训:)
最佳答案
我的建议:
将差异时间存储在 map 中(城市名称,当前时间差异),例如,如果您住在伦敦并且需要纽约市的当前时间,那么您(NewYourk,-5)将所有键及其模型初始化时的值通过加载属性文件,并且当您想要添加或删除城市时无需重写模型类。
当 View 开始时,获取所有城市并将其放入 Jlist 中( Controller 执行此操作)
您不必迭代..使用城市名称作为关键来找到正确的时间,如下面的示例代码所示。
属性加载部分:
使用 .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部分:您的 Controller 将连接它们:
这是一个示例代码:
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));
}
}
您必须以类似的方式编写删除按钮及其操作。我希望我能帮助你!如果您有疑问,请随时提问!
关于Java 作业帮助(与 MVC 作斗争),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303029/
我是一名优秀的程序员,十分优秀!