gpt4 book ai didi

Java 作业帮助(与 MVC 作斗争)

转载 作者:行者123 更新时间:2023-12-01 13:05:24 24 4
gpt4 key购买 nike

我有一个 Java 作业,我们必须使用 MVC 设计模式创建一个足够简单的世界时钟应用程序。

该应用程序允许用户在屏幕上同时查看多个时间(或时钟)。他们从一系列城市创建的 Jlist 中选择这些时钟(这些城市的相关时差用逗号分隔,例如“巴塞罗那,+1.0”。然后按添加按钮显示这些城市的时钟/时钟。有还有一个删除城市按钮,其工作方式与添加按钮相同,只是显然会删除显示的时钟。时钟和城市显示在两侧的 Jscroll Pane 中。

我正在努力解决一些问题。

  • 我不知道如何通过 MVC 将按钮连接到操作监听器,然后连接到选择监听器?
  • 我一直在尝试弄清楚如何将选定的城市存储在数组列表中,然后迭代此列表以显示/隐藏相关时钟。这是最好的方法吗?我忍不住觉得会有一个更优雅的解决方案。
  • 我也不确定创建多个时钟的最佳方法?我尝试了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com