Включение класса в уже существующий GUI-класс Java - PullRequest
0 голосов
/ 20 октября 2019

Я создал программу цифрового будильника с рабочим графическим интерфейсом, классом контроллера и классом графического интерфейса. У меня есть отдельный класс, который также рисует цифровые часы, но я не знаю, как реализовать их через графический интерфейс, который у меня уже есть. Прямо сейчас у меня есть три вкладки, и одна из них предназначена для аналоговых часов. Я либо хочу, чтобы он находился внутри панели вкладок, либо чтобы он появлялся как собственное окно всякий раз, когда кто-то нажимает на вкладку Аналоговый. Итак, вопрос в том, как мне объединить этот отдельный рабочий класс в уже существующий графический интерфейс, который у меня есть?

Вот так выглядит будильник прямо сейчас: https://gyazo.com/d21f2fe434938a2bf717e887e96038bd

Вот какмой GUI-класс выглядит так:

public class GUIClock1 extends JFrame {

    ControllerClock controller = new ControllerClock();
    DefaultListModel myList = new DefaultListModel();
    JList queList = new JList(myList);
    private JScrollPane scrollPane = new JScrollPane(queList);
    JPanel setTimePan = new JPanel();
    JLabel timeL;
    JPanel panel;

    // ClockView myCircleView = new ClockView(controller);
    private Timer timer;
    private JTabbedPane tabbedPane = new JTabbedPane();
    protected JButton addAlarmButton = new JButton("Add Alarm");
    protected JButton setTimeButton = new JButton("Set Time");
    protected JButton removeAllAlarms = new JButton("Remove all alarmss");
    private String dayss, hourss, minu, secu;
    Collection<AlarmType> mac = controller.getAlarms();
    String[] dayList = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
    String[] hourList = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14",
            "15", "16", "17", "18", "19", "20", "21", "22", "23", "24" };
    String[] minuteList = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14",
            "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32",
            "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50",
            "51", "52", "53", "54", "55", "56", "57", "58", "59" };
    String[] secondList = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14",
            "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32",
            "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50",
            "51", "52", "53", "54", "55", "56", "57", "58", "59" };

    ComboBoxModel<String> day = new DefaultComboBoxModel<String>(dayList);
    ComboBoxModel<String> hour = new DefaultComboBoxModel<String>(hourList);
    ComboBoxModel<String> minute = new DefaultComboBoxModel<String>(minuteList);
    ComboBoxModel<String> second = new DefaultComboBoxModel<String>(secondList);
    ComboBoxModel<String> day2 = new DefaultComboBoxModel<String>(dayList);
    ComboBoxModel<String> hour2 = new DefaultComboBoxModel<String>(hourList);
    ComboBoxModel<String> minute2 = new DefaultComboBoxModel<String>(minuteList);
    ComboBoxModel<String> second2 = new DefaultComboBoxModel<String>(secondList);

    JComboBox<String> dayBox = new JComboBox<String>(day);
    JComboBox<String> hourBox = new JComboBox<String>(hour);
    JComboBox<String> minuteBox = new JComboBox<String>(minute);
    JComboBox<String> secondBox = new JComboBox<String>(second);
    JComboBox<String> dayBox2 = new JComboBox<String>(day2);
    JComboBox<String> hourBox2 = new JComboBox<String>(hour2);
    JComboBox<String> minuteBox2 = new JComboBox<String>(minute2);
    JComboBox<String> secondBox2 = new JComboBox<String>(second2);

    public GUIClock1(String s) {

        super(s);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        add(tabbedPane);
        tabbedPane.add("Set Time", createSetTimePanel());
        tabbedPane.add("Add Alarm", createSetAlarmPanel());
        tabbedPane.add("Analogue", createAnalogPanel());

        timer = new Timer(1000, e -> {

            timeL.setText(controller.getTime1().toString());
            controller.tickTack();

        });

        timer.start();

        scrollPane.isPreferredSizeSet();

        this.setSize(450, 400);
        this.setVisible(true);

        Date t = new Date();

        String currentTime = t.toString().substring(0, 3) + " " + t.toString().substring(11, 19);
        timeL.setText(currentTime);
        controller.setTime(new Time(currentTime));

        removeAllAlarms.addActionListener(n -> ListenerTabortAlarms());
        addAlarmButton.addActionListener(n -> ListenerAlarm());
        setTimeButton.addActionListener(n -> ListenerTime());

    }

    private JPanel createAnalogPanel() {
        JPanel analogP = new JPanel();
        return analogP;
    }

    private void ListenerTabortAlarms() {
        mac.clear();
        myList.removeAllElements();
    }

    private void ListenerAlarm() {
        dayss = dayBox.getSelectedItem().toString();
        hourss = hourBox.getSelectedItem().toString();
        minu = minuteBox.getSelectedItem().toString();
        secu = secondBox.getSelectedItem().toString();

        myList.addElement(dayss + " " + hourss + ":" + minu + ":" + secu);

        controller
                .addAlarm(new Alarm(new Time(dayss + " " + hourss + ":" + minu + ":" + secu), new AlarmActionEvent()));
    }

    private void ListenerTime() {
        dayss = dayBox.getSelectedItem().toString();
        hourss = hourBox.getSelectedItem().toString();
        minu = minuteBox.getSelectedItem().toString();
        secu = secondBox.getSelectedItem().toString();

        timeL.setText(dayss + " " + hourss + ":" + minu + ":" + secu);
        controller.setTime(new Time(dayss + " " + hourss + ":" + minu + ":" + secu));
    }

    public JPanel createSetTimePanel() {

        panel = new JPanel();
        panel.setLayout(new FlowLayout());
        timeL = new JLabel();
        timeL.setFont(new Font("Arial", Font.PLAIN, 48));

        setTimePan.add(dayBox);
        setTimePan.add(hourBox);
        setTimePan.add(minuteBox);
        setTimePan.add(secondBox);
        setTimePan.add(setTimeButton);

        setTimePan.add(panel);
        panel.add(timeL);

        return setTimePan;

    }

    public JPanel createSetAlarmPanel() {

        JPanel setAlarmPan = new JPanel();

        setAlarmPan.add(removeAllAlarms);
        setAlarmPan.add(dayBox2);
        setAlarmPan.add(hourBox2);
        setAlarmPan.add(minuteBox2);
        setAlarmPan.add(secondBox2);
        setAlarmPan.add(addAlarmButton);
        setAlarmPan.add(scrollPane, BorderLayout.SOUTH);
        return setAlarmPan;

    }


    public static void main(String[] args) {
        new GUIClock1("My App");
    }
}

А вот так выглядит мой класс аналоговых часов:

public class ClockView {

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

public ClockView() {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
                    | UnsupportedLookAndFeelException ex) {
                ex.printStackTrace();
            }

            JFrame frame = new JFrame("Testing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new ClockFace());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}

public class ClockFace extends JPanel {

    public ClockFace() {
        this.startClock();
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(600, 600);
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g.create();

        LocalTime now = LocalTime.now();
        int seconds = now.getSecond();
        int minutes = now.getMinute();
        int hours = now.getHour();

        g2d.setColor(Color.BLACK);
        g2d.fillRect(0, 0, 600, 600);
        g2d.setColor(Color.WHITE);
        g2d.translate(300, 300);

        // Drawing the hour markers
        for (int i = 0; i < 12; i++) {

            g2d.drawLine(0, -260, 0, -300);
            g2d.rotate(Math.PI / 6);

        }

        g2d.rotate(seconds * Math.PI / 30);
        g2d.drawLine(0, 0, 0, -290);

        g2d.rotate(2 * Math.PI - seconds * Math.PI / 30);
        g2d.rotate(minutes * Math.PI / 30);
        g2d.setStroke(new BasicStroke(3));
        g2d.drawLine(0, 0, 0, -250);

        g2d.rotate(2 * Math.PI - minutes * Math.PI / 30);
        g2d.rotate(hours * Math.PI / 6);
        g2d.setStroke(new BasicStroke(6));
        g2d.drawLine(0, 0, 0, -200);

        g2d.dispose();
    }

    public void startClock() {
        Timer timer = new Timer(500, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                repaint();
            }
        });
        timer.start();
    }

}

}
...