Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一次多个时钟-Java_Java - Fatal编程技术网

一次多个时钟-Java

一次多个时钟-Java,java,Java,我知道有一个类似的问题是用javascript提出和回答的,但我有一个Java作业,涉及显示单个/多个位置的时间(从列表中选择) 我已经构建了一定数量的代码,您可以在下面的代码中看到。然而,当我选择多个位置时,唯一“滴答”的时钟是最后一个选择的时钟,其他时钟在创建时只是冻结 有人能看看我下面的代码,看看他们是否能给我一些指导吗 谢谢 import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font; impor

我知道有一个类似的问题是用javascript提出和回答的,但我有一个Java作业,涉及显示单个/多个位置的时间(从列表中选择)

我已经构建了一定数量的代码,您可以在下面的代码中看到。然而,当我选择多个位置时,唯一“滴答”的时钟是最后一个选择的时钟,其他时钟在创建时只是冻结

有人能看看我下面的代码,看看他们是否能给我一些指导吗

谢谢

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.Timer;

public class AssignmentV1 implements ActionListener/* ,ListSelectionListener */
{
    private String[] cities;
    private JButton addBtn;
    private JButton minusBtn;
    private JList cityList;
    private JPanel right;
    private JPanel displayArea;
    private JPanel[] clockDisplay;
    private long currentTime;
    private long cityTime;
    private int hourDiff;
    private String cityName;
    private String timeInFormat;
    private JLabel time;
    private JPanel topRight;
    private ArrayList<String> cityNamesList;
    private ArrayList<Long> cityTimes;

    public AssignmentV1() {
        JFrame appWin = new JFrame("World Time");
        appWin.setSize(400, 400);
        appWin.setLocationRelativeTo(null);
        appWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Font preferredFont = new Font("OCR A EXTENDED", Font.BOLD, 50);

        Container contentPane = appWin.getContentPane();

        displayArea = new JPanel();
        displayArea.setLayout(new GridLayout(1, 2));

        JPanel left = new JPanel();
        left.setLayout(new GridLayout(2, 1));

        JPanel topLeft = new JPanel();
        topLeft.setLayout(new FlowLayout(FlowLayout.CENTER));
        // adding of +/- buttons to display
        addBtn = new JButton();
        addBtn.setText("+");
        addBtn.addActionListener(this);
        topLeft.add(addBtn);
        minusBtn = new JButton();
        minusBtn.setText("-");
        minusBtn.addActionListener(this);
        topLeft.add(minusBtn);
        left.add(topLeft);

        // adding of list of cities to a scrollpane to add to display
        JPanel bottomLeft = new JPanel();

        setUpCities();
        cityList = new JList(cities);
        cityList.setSelectedIndex(0);
        cityList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        JScrollPane scrollableList = new JScrollPane(cityList);
        bottomLeft.add(scrollableList);
        left.add(bottomLeft);

        right = new JPanel();
        topRight = new JPanel();
        clockDisplay = new JPanel[1];
        topRight.setLayout(new GridLayout(clockDisplay.length, 1));
        for (int i = 0; i < clockDisplay.length; i++) {
            clockDisplay[i] = new JPanel();
            cityName = cities[0].substring(0, cities[0].indexOf(","));
            hourDiff = Integer.parseInt(cities[0].substring(cities[0].indexOf(",") + 1));
            currentTime = System.currentTimeMillis();
            cityTime = System.currentTimeMillis() + (1000 * 60 * 60 * hourDiff);
            clockDisplay[i].setBorder(BorderFactory.createTitledBorder(cityName));
            time = new JLabel();
            time.setOpaque(true);
            timeInFormat = textAsTime(cityTime);
            time.setText(timeInFormat);
            clockDisplay[i].add(time);
            topRight.add(clockDisplay[i]);
        }
        right.add(topRight);

        displayArea.add(left);
        displayArea.add(right);
        contentPane.add(displayArea);
        Timer t = new Timer(1000, this);
        t.start();
        appWin.setVisible(true);

    }

    public void actionPerformed(ActionEvent e) {
        cityTime = tick(cityTime);
        timeInFormat = textAsTime(cityTime);
        time.setText(timeInFormat);

        cityNamesList = new ArrayList<String>();
        cityTimes = new ArrayList<Long>();

        Object[] obj = cityList.getSelectedValues();
        Object source = e.getSource();
        if (source == addBtn) {
            topRight.removeAll();
            right.setLayout(new GridLayout(obj.length, 1));
            clockDisplay = new JPanel[obj.length];
            topRight.setLayout(new GridLayout(obj.length, 1));
            ArrayList<String> cityNamesList = new ArrayList<String>();
            ArrayList<Long> cityTimes = new ArrayList<Long>();
            for (int i = 0; i < obj.length; i++) {
                String temp = (String) obj[i];
                clockDisplay[i] = new JPanel();
                cityName = temp.substring(0, temp.indexOf(","));
                cityNamesList.add(cityName);
                hourDiff = Integer.parseInt(temp.substring(temp.indexOf(",") + 1));
                currentTime = System.currentTimeMillis();
                cityTime = System.currentTimeMillis() + (1000 * 60 * 60 * hourDiff);
                cityTimes.add(cityTime);
                tick(cityTime);
                clockDisplay[i].setBorder(BorderFactory.createTitledBorder(cityName));
                time = new JLabel();
                time.setOpaque(true);
                timeInFormat = textAsTime(cityTime);
                time.setText(timeInFormat);
                clockDisplay[i].add(time);
                topRight.add(clockDisplay[i]);
            }
            right.add(topRight);
        }
    }

    public void setUpCities() {
        cities = new String[] { "Accra,0", "Addis Abada,+3", "Adelaide,+11", "Algiers,-1",
                "Almaty,+6", "Amman,+3", "Amsterdam,+1", "Anadyr,+12", "Anchorage,-8", "Ankara,+2",
                "London,0", "Paris,+1" };
    }

    public String textAsTime(long currentTime) {
        long second = (currentTime / 1000) % 60;
        long minute = (currentTime / (1000 * 60)) % 60;
        long hour = (currentTime / (1000 * 60 * 60)) % 24;
        return String.format("%02d:%02d:%02d", hour, minute, second);
    }

    public static void main(String[] args) {
        new AssignmentV1();
    }

    public long tick(long cityTime) {
        cityTime = cityTime + 1000;
        return cityTime;
    }
}
导入java.awt.Container;
导入java.awt.FlowLayout;
导入java.awt.Font;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入javax.swing.BorderFactory;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JList;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.ListSelectionModel;
导入javax.swing.Timer;
公共类AssignmentV1实现ActionListener/*,ListSelectionListener*/
{
私人城市;
私有JButton addBtn;
私人JButton minusBtn;
私人城市名单;
私权;
私人JPanel展示区;
专用JPanel[]时钟显示器;
私人长时间;
私人长城市时间;
私人住宅;
私有字符串cityName;
私有字符串时间信息;
专用JLabel时间;
私人JPanel topRight;
私人ArrayList cityNamesList;
私人ArrayList城市时间;
公开转让v1(){
JFrame appWin=新JFrame(“世界时间”);
appWin.setSize(400400);
appWin.setLocationRelativeTo(空);
appWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Font preferredFont=新字体(“OCR A扩展”,Font.BOLD,50);
容器contentPane=appWin.getContentPane();
displayArea=newJPanel();
setLayout(新的GridLayout(1,2));
JPanel left=新的JPanel();
左.setLayout(新的GridLayout(2,1));
JPanel topLeft=新的JPanel();
setLayout(新的FlowLayout(FlowLayout.CENTER));
//添加+/-按钮以显示
addBtn=newjbutton();
addBtn.setText(“+”);
addBtn.addActionListener(此);
左上角.add(addBtn);
minusBtn=新的JButton();
最小BTN.setText(“-”);
minusBtn.addActionListener(此);
左上角。添加(最小BTN);
左。添加(左上角);
//将城市列表添加到滚动窗格以添加到显示
JPanel bottomLeft=新的JPanel();
设置城市();
cityList=新的JLList(城市);
城市列表集合选定索引(0);
cityList.setSelectionMode(ListSelectionModel.MULTIPLE\u INTERVAL\u SELECTION);
JScrollPane scrollableList=新的JScrollPane(城市列表);
添加(可滚动列表);
左。添加(左下角);
右=新JPanel();
topRight=新的JPanel();
clockDisplay=新JPanel[1];
setLayout(新的网格布局(clockDisplay.length,1));
对于(int i=0;i