Я создал программу цифрового будильника с рабочим графическим интерфейсом, классом контроллера и классом графического интерфейса. У меня есть отдельный класс, который также рисует цифровые часы, но я не знаю, как реализовать их через графический интерфейс, который у меня уже есть. Прямо сейчас у меня есть три вкладки, и одна из них предназначена для аналоговых часов. Я либо хочу, чтобы он находился внутри панели вкладок, либо чтобы он появлялся как собственное окно всякий раз, когда кто-то нажимает на вкладку Аналоговый. Итак, вопрос в том, как мне объединить этот отдельный рабочий класс в уже существующий графический интерфейс, который у меня есть?
Вот так выглядит будильник прямо сейчас: 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();
}
}
}