/** * Main Dialog for adding a tutorial page * * @author Kevin Strong */ package cstutor; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JTextArea; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JScrollPane; import javax.swing.JOptionPane; import javax.swing.JTabbedPane; import javax.swing.Box; import javax.swing.ScrollPaneConstants; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class AddPageUI extends JFrame implements ActionListener { protected final int maxWidth; protected final double maxHeight; public AddPageUI() { maxWidth = 3000; maxHeight = 1.9; setSize(666,528); setTitle("CSTutor"); //modified to work with the create tutorial GUI //setDefaultCloseOperation(EXIT_ON_CLOSE); setDefaultCloseOperation(HIDE_ON_CLOSE); JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); JLabel heading = new JLabel("

Add a Tutorial Page

", JLabel.CENTER); Box body = Box.createVerticalBox(); body.add(Box.createVerticalStrut(10)); body.add(buildTitleRow()); body.add(Box.createVerticalStrut(15)); body.add(buildBody()); body.add(Box.createVerticalStrut(20)); Box sideBar = buildSideBar(); sideBar.add(Box.createVerticalStrut(20)); Box bottomRow = buildBottomRow(); Box tutframe = Box.createHorizontalBox(); tutframe.add(Box.createHorizontalStrut(70)); tutframe.add(body); tutframe.add(Box.createHorizontalStrut(10)); tutframe.add(sideBar); JTabbedPane tabPane = new JTabbedPane(); tabPane.add("Tutorial", tutframe); tabPane.add("Options", buildOptions()); mainPanel.add(heading, BorderLayout.PAGE_START); mainPanel.add(tabPane, BorderLayout.CENTER); mainPanel.add(bottomRow, BorderLayout.PAGE_END); add(mainPanel); } protected Box buildSideBar() { Box sideFiles = Box.createVerticalBox(); JButton addPictureButton = new JButton("Add Picture"); addPictureButton.setActionCommand("picture"); addPictureButton.addActionListener(this); sideFiles.add(Box.createVerticalStrut(50)); sideFiles.add(addPictureButton); sideFiles.add(Box.createVerticalGlue()); sideFiles.add(buildRelFiles()); return sideFiles; } protected Box buildRelFiles() { Box vbox = Box.createVerticalBox(); JLabel rel = new JLabel("Related Files: ", JLabel.LEFT); JTextArea reltext = new JTextArea(); JScrollPane relpane = new JScrollPane(reltext); relpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); relpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); vbox.add(rel); vbox.add(relpane); return vbox; } protected Box buildTitleRow() { Box rbox = Box.createHorizontalBox(); JLabel title = new JLabel("Title: "); JTextField titletext = new JTextField(); titletext.setMaximumSize(new Dimension(maxWidth, (int)(maxHeight * titletext.getFont().getSize()))); rbox.add(title); rbox.add(titletext); return rbox; } protected Box buildBody() { Box vbox = Box.createVerticalBox(); // put label in its own box to left-align further Box bb = Box.createHorizontalBox(); JLabel body = new JLabel("Body: ", JLabel.LEFT); bb.add(body); bb.add(Box.createHorizontalStrut(400)); JTextArea bodytext = new JTextArea(); JScrollPane bodypane = new JScrollPane(bodytext); bodypane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); bodypane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); bodypane.setPreferredSize(new Dimension(400, 450)); vbox.add(bb); vbox.add(Box.createVerticalStrut(5)); vbox.add(bodypane); return vbox; } protected Box buildBottomRow() { Box rbox = Box.createHorizontalBox(); JButton publish = new JButton("Publish Page"); publish.setActionCommand("publish"); publish.addActionListener(this); JButton save = new JButton("Save Page"); save.setActionCommand("save"); save.addActionListener(this); JButton add = new JButton("Add Page"); add.setActionCommand("add"); add.addActionListener(this); rbox.add(Box.createHorizontalGlue()); rbox.add(publish); rbox.add(Box.createHorizontalStrut(10)); rbox.add(save); rbox.add(Box.createHorizontalStrut(10)); rbox.add(add); rbox.add(Box.createHorizontalGlue()); return rbox; } protected Box buildOptions() { Box optPanel = Box.createVerticalBox(); Box row1 = Box.createHorizontalBox(); Box row2 = Box.createHorizontalBox(); Box row3 = Box.createHorizontalBox(); JCheckBox useShell = new JCheckBox("Use Interactive Shell"); JLabel lang = new JLabel("Language: ", JLabel.RIGHT); String[] languages = {"C/C++", "Java", "Python", "Ruby"}; JComboBox langbox = new JComboBox(languages); langbox.setSelectedIndex(1); langbox.setMaximumSize(new Dimension(maxWidth, (int)(maxHeight * langbox.getFont().getSize()))); //lang.setMaximumSize(langbox.getMaximumSize()); JLabel def = new JLabel("Default Code: ", JLabel.RIGHT); JTextArea defcode = new JTextArea(); JScrollPane codepane = new JScrollPane(defcode); codepane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); codepane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); row1.add(Box.createHorizontalGlue()); row1.add(useShell); row1.add(Box.createHorizontalGlue()); row2.add(lang); row2.add(langbox); row2.add(Box.createHorizontalGlue()); row3.add(def); row3.add(Box.createHorizontalStrut(10)); row3.add(codepane); optPanel.add(row1); optPanel.add(Box.createVerticalStrut(15)); optPanel.add(row2); optPanel.add(Box.createVerticalStrut(15)); optPanel.add(row3); return optPanel; } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("publish")) { JOptionPane.showMessageDialog(this, "Tutorial Page Saved to Server"); } else if (e.getActionCommand().equals("save")) { JOptionPane.showMessageDialog(this, "Tutorial Page Saved to Disk"); } else if (e.getActionCommand().equals("add")) { JOptionPane.showMessageDialog(this, "Tutorial Page Successfully Added"); } else if (e.getActionCommand().equals("picture")) { // open add picture dialog AddPictureDlg addpic = new AddPictureDlg(this); addpic.setVisible(true); } } /** * @param args */ public static void main(String[] args) { JFrame frame = new AddPageUI(); frame.setVisible(true); } }