package org.openslx.dozmod.gui.wizard.layout; import java.util.Calendar; import java.awt.FlowLayout; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JEditorPane; import javax.swing.SpinnerDateModel; import javax.swing.text.DateFormatter; import javax.swing.text.StyledEditorKit; import javax.swing.text.html.HTMLEditorKit; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.QDatePickerImpl; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; import java.awt.Dimension; import java.awt.GridLayout; @SuppressWarnings("serial") public abstract class LectureCreationPageLayout extends WizardPage { protected final JTextField txtName; protected final JEditorPane txtDescription; protected final QDatePickerImpl dtpStartDate; protected final QDatePickerImpl dtpEndDate; protected final JSpinner spnStartTime; protected final JSpinner spnEndTime; protected final QLabel lblCalcPeriod; protected final JButton btnBold; protected final JButton btnItalic; protected final JButton btnUnderline; protected final JButton btnWysiwyg; protected final JComboBox cbTxtSize; protected final JComboBox cbTxtColor; protected final HTMLEditorKit kit; /** * Page for creating lectures * * @param editExistingLecture whether to edit existing lecture or create new one */ public LectureCreationPageLayout(Wizard wizard, String title) { super(wizard, title); setDescription("Geben Sie bitte einen aussagekräftigen Namen für die neue Veranstaltung ein."); GridManager grid = new GridManager(this, 3); // lecture name txtName = new JTextField(); grid.add(new QLabel("Veranstaltungsname")); grid.add(txtName, 2).fill(true, false).expand(true, false); grid.nextRow(); // buttons for text editing JPanel editingPanel = new JPanel(); editingPanel.setLayout(new FlowLayout(FlowLayout.LEADING)); JPanel emptyPanel = new JPanel(); grid.add(emptyPanel); btnBold = new JButton(new StyledEditorKit.BoldAction()); btnBold.setIcon(Gui.getScaledIconResource("/img/bold.png", "B", 15, this)); btnBold.setText(""); btnItalic = new JButton(new StyledEditorKit.ItalicAction()); btnItalic.setIcon(Gui.getScaledIconResource("/img/italic.png", "B", 15, this)); btnItalic.setText(""); btnUnderline = new JButton(new StyledEditorKit.UnderlineAction()); btnUnderline.setIcon(Gui.getScaledIconResource("/img/underline.png", "B", 15, this)); btnUnderline.setText(""); editingPanel.add(btnBold); editingPanel.add(btnItalic); editingPanel.add(btnUnderline); String[] textsizes = {"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29"}; cbTxtSize = new JComboBox<>(textsizes); cbTxtSize.setPreferredSize(new Dimension(65,25)); editingPanel.add(cbTxtSize); Object[] colors = {"Black", "Blue", "Red", "Yellow", "Green"}; cbTxtColor = new JComboBox<>(colors); cbTxtColor.setPreferredSize(new Dimension(95,25)); editingPanel.add(cbTxtColor); grid.add(editingPanel); emptyPanel.setLayout(new FlowLayout()); btnWysiwyg = new JButton("HTML"); btnWysiwyg.setPreferredSize(new Dimension(100,25)); emptyPanel.add(btnWysiwyg); grid.add(emptyPanel); grid.nextRow(); // description txtDescription = new JEditorPane(); kit = new HTMLEditorKit(); txtDescription.setEditorKit(kit); txtDescription.setContentType("text/html"); txtDescription.setPreferredSize(new Dimension(600,800)); JScrollPane descPane = new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); txtDescription.setMinimumSize(Gui.getScaledDimension(0, 60)); descPane.setMinimumSize(txtDescription.getMinimumSize()); grid.add(new QLabel("Beschreibung")); grid.add(descPane, 2).fill(true, false).expand(true, false); grid.nextRow(); // Start date/time dtpStartDate = new QDatePickerImpl(); spnStartTime = makeTimeSpinner(0, 0); grid.add(new QLabel("Startdatum")); grid.add(dtpStartDate).fill(true, false).expand(true, false); grid.add(spnStartTime); grid.nextRow(); dtpEndDate = new QDatePickerImpl(); spnEndTime = makeTimeSpinner(23, 59); grid.add(new QLabel("Enddatum")); grid.add(dtpEndDate).fill(true, false).expand(true, false); grid.add(spnEndTime); grid.nextRow(); grid.add(new QLabel("Dauer der Veranstaltung: ")); lblCalcPeriod = new QLabel(); grid.add(lblCalcPeriod, 2); grid.nextRow(); grid.finish(true); } private JSpinner makeTimeSpinner(int h, int m) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, h); // 24 == 12 PM == 00:00:00 calendar.set(Calendar.MINUTE, m); calendar.set(Calendar.SECOND, 0); SpinnerDateModel model = new SpinnerDateModel(); model.setValue(calendar.getTime()); JSpinner spinner = new JSpinner(model); JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm"); DateFormatter formatter = (DateFormatter) editor.getTextField().getFormatter(); formatter.setAllowsInvalid(false); // this makes what you want formatter.setOverwriteMode(true); spinner.setEditor(editor); return spinner; } }