import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class NewTestDialog extends JDialog { static JFrame editorWindow = new TestEditor(); public NewTestDialog(Frame owner, boolean modal) { super(owner, "New Test", modal); Container c = getContentPane(); // YES, I am going to use GridBatLayout! c.setLayout(new GridBagLayout()); // Tremble before me! GridBagConstraints gbc = new GridBagConstraints(); // Fill up panel with components // Right-justify labels gbc.anchor = gbc.EAST; gbc.fill = gbc.NONE; gbc.weightx = 0; c.add(new JLabel("Time: "), gbc); // Data fields expand to fill available space gbc.fill = gbc.HORIZONTAL; gbc.weightx = 1; c.add(new JSpinner(), gbc); // Another label... gbc.weightx = 0; gbc.fill = gbc.NONE; c.add(new JLabel("Hours "), gbc); // And so on. gbc.fill = gbc.HORIZONTAL; gbc.weightx = 1; c.add(new JSpinner(), gbc); // End of the row. gbc.gridwidth = gbc.REMAINDER; gbc.weightx = 0; gbc.fill = gbc.NONE; c.add(new JLabel("Minutes "), gbc); gbc.gridwidth = 1; gbc.weightx = 0; gbc.fill = gbc.NONE; c.add(new JLabel("Class: "), gbc); gbc.fill = gbc.HORIZONTAL; gbc.weightx = 1; gbc.gridwidth = gbc.REMAINDER; JComboBox className = new JComboBox(); className.setEditable(true); c.add(className, gbc); gbc.gridwidth = 1; gbc.weightx = 0; gbc.fill = gbc.NONE; c.add(new JLabel("Questions: "), gbc); gbc.fill = gbc.HORIZONTAL; gbc.weightx = 1; gbc.gridwidth = gbc.REMAINDER; c.add(new JSpinner(), gbc); JTabbedPane filters = new JTabbedPane(); JPanel simple = new JPanel(); simple.setLayout(new GridBagLayout()); gbc.gridwidth = 1; gbc.weightx = 0; gbc.fill = gbc.NONE; simple.add(new JLabel("Keywords: "), gbc); gbc.gridwidth = gbc.REMAINDER; gbc.weightx = 1; gbc.fill = gbc.HORIZONTAL; simple.add(new JTextField(), gbc); gbc.weightx = 0; gbc.gridwidth = 1; gbc.fill = gbc.NONE; simple.add(new JLabel("Last used: "), gbc); gbc.weightx = 1; gbc.fill = gbc.HORIZONTAL; simple.add(new JComboBox(new String[] {"Any", "Before", "After"}), gbc); gbc.gridwidth = gbc.REMAINDER; simple.add(new JTextField(), gbc); gbc.gridwidth = 1; gbc.weightx = 0; gbc.fill = gbc.NONE; simple.add(new JLabel("Difficulty: "), gbc); gbc.gridwidth = gbc.REMAINDER; gbc.weightx = 1; gbc.fill = gbc.HORIZONTAL; simple.add(new JComboBox(new String[] {"Any", "Easy", "Medium", "Hard"}), gbc); gbc.gridwidth = 1; gbc.weightx = 0; gbc.weighty = 0; gbc.fill = gbc.NONE; simple.add(new JLabel(), gbc); gbc.weightx = 1; gbc.fill = gbc.HORIZONTAL; simple.add(new JComboBox(new String[] {"Any", "Before", "After"}), gbc); gbc.weightx = 0; gbc.fill = gbc.NONE; simple.add(new JLabel(" Week #"), gbc); gbc.weightx = 1; gbc.fill = gbc.HORIZONTAL; gbc.gridwidth = gbc.REMAINDER; simple.add(new JSpinner(), gbc); gbc.weightx = 1; gbc.weighty = 1; gbc.fill = gbc.BOTH; simple.add(new JPanel(), gbc); filters.add("Simple", simple); JPanel detailed = new JPanel(); detailed.setLayout(new GridBagLayout()); gbc.gridwidth = gbc.REMAINDER; gbc.weightx = 1; gbc.weighty = 1; gbc.fill = gbc.BOTH; DefaultTableModel tm = new DefaultTableModel(new String[]{"Quantity", "Type", "Length", "Week", "Difficulty", "Last Used"}, 0); tm.addRow(new String[] {"2", "Code", "", "<10", "Hard", ""}); tm.addRow(new String[] {"2", "Multiple Choice", "", "<10", ""}); tm.addRow(new String[] {"4", "True/False", "<5", "<10", "Easy", ""}); tm.addRow(new String[] {"2", "Short Answer", ">5", "", "Hard", "<1/1/2007"}); JTable t = new JTable(tm); t.setPreferredScrollableViewportSize(new Dimension(300, 100)); detailed.add(new JScrollPane(t), gbc); gbc.gridwidth = 1; gbc.weightx = 0; gbc.weighty = 0; gbc.fill = gbc.NONE; detailed.add(new JButton("+"), gbc); detailed.add(new JButton("-"), gbc); filters.add("Detailed", detailed); gbc.gridwidth = gbc.REMAINDER; gbc.weightx = 1; gbc.weighty = 1; gbc.fill = gbc.BOTH; //c.add(new JPanel(), gbc); c.add(filters, gbc); Box buttons = Box.createHorizontalBox(); buttons.add(new JButton("<< Hide Filtering")); buttons.add(Box.createHorizontalGlue()); JButton ok = new JButton("OK"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); editorWindow.setVisible(true); } }); JButton cancel = new JButton("Cancel"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); } }); buttons.add(ok); buttons.add(cancel); gbc.weighty = 0; c.add(buttons, gbc); pack(); } }