public Preferences() { // setup dialog for the prefs //dialog = new JDialog(editor, "Preferences", true); dialog = new JFrame(_("Preferences")); dialog.setResizable(false); Container pain = dialog.getContentPane(); pain.setLayout(null); int top = GUI_BIG; int left = GUI_BIG; int right = 0; JLabel label; JButton button; //, button2; //JComboBox combo; Dimension d, d2; //, d3; int h, vmax; // Sketchbook location: // [...............................] [ Browse ] label = new JLabel(_("Sketchbook location:")); pain.add(label); d = label.getPreferredSize(); label.setBounds(left, top, d.width, d.height); top += d.height; // + GUI_SMALL; sketchbookLocationField = new JTextField(40); pain.add(sketchbookLocationField); d = sketchbookLocationField.getPreferredSize(); button = new JButton(PROMPT_BROWSE); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { File dflt = new File(sketchbookLocationField.getText()); File file = Base.selectFolder(_("Select new sketchbook location"), dflt, dialog); if (file != null) { sketchbookLocationField.setText(file.getAbsolutePath()); } } }); pain.add(button); d2 = button.getPreferredSize(); // take max height of all components to vertically align em vmax = Math.max(d.height, d2.height); sketchbookLocationField.setBounds(left, top + (vmax-d.height)/2, d.width, d.height); h = left + d.width + GUI_SMALL; button.setBounds(h, top + (vmax-d2.height)/2, d2.width, d2.height); right = Math.max(right, h + d2.width + GUI_BIG); top += vmax + GUI_BETWEEN; // Preferred language: [ ] (requires restart of Arduino) Container box = Box.createHorizontalBox(); label = new JLabel(_("Editor language: ")); box.add(label); comboLanguage = new JComboBox(languages); comboLanguage.setSelectedIndex((Arrays.asList(languagesISO)).indexOf(Preferences.get("editor.languages.current"))); box.add(comboLanguage); label = new JLabel(_(" (requires restart of Arduino)")); box.add(label); pain.add(box); d = box.getPreferredSize(); box.setForeground(Color.gray); box.setBounds(left, top, d.width, d.height); right = Math.max(right, left + d.width); top += d.height + GUI_BETWEEN; // Editor font size [ ] box = Box.createHorizontalBox(); label = new JLabel(_("Editor font size: ")); box.add(label); fontSizeField = new JTextField(4); box.add(fontSizeField); label = new JLabel(_(" (requires restart of Arduino)")); box.add(label); pain.add(box); d = box.getPreferredSize(); box.setBounds(left, top, d.width, d.height); Font editorFont = Preferences.getFont("editor.font"); fontSizeField.setText(String.valueOf(editorFont.getSize())); top += d.height + GUI_BETWEEN; // Show verbose output during: [ ] compilation [ ] upload box = Box.createHorizontalBox(); label = new JLabel(_("Show verbose output during: ")); box.add(label); verboseCompilationBox = new JCheckBox(_("compilation ")); box.add(verboseCompilationBox); verboseUploadBox = new JCheckBox(_("upload")); box.add(verboseUploadBox); pain.add(box); d = box.getPreferredSize(); box.setBounds(left, top, d.width, d.height); top += d.height + GUI_BETWEEN; // [ ] Verify code after upload verifyUploadBox = new JCheckBox(_("Verify code after upload")); pain.add(verifyUploadBox); d = verifyUploadBox.getPreferredSize(); verifyUploadBox.setBounds(left, top, d.width + 10, d.height); right = Math.max(right, left + d.width); top += d.height + GUI_BETWEEN; // [ ] Use external editor externalEditorBox = new JCheckBox(_("Use external editor")); pain.add(externalEditorBox); d = externalEditorBox.getPreferredSize(); externalEditorBox.setBounds(left, top, d.width + 10, d.height); right = Math.max(right, left + d.width); top += d.height + GUI_BETWEEN; // [ ] Check for updates on startup checkUpdatesBox = new JCheckBox(_("Check for updates on startup")); pain.add(checkUpdatesBox); d = checkUpdatesBox.getPreferredSize(); checkUpdatesBox.setBounds(left, top, d.width + 10, d.height); right = Math.max(right, left + d.width); top += d.height + GUI_BETWEEN; // [ ] Update sketch files to new extension on save (.pde -> .ino) updateExtensionBox = new JCheckBox(_("Update sketch files to new extension on save (.pde -> .ino)")); pain.add(updateExtensionBox); d = updateExtensionBox.getPreferredSize(); updateExtensionBox.setBounds(left, top, d.width + 10, d.height); right = Math.max(right, left + d.width); top += d.height + GUI_BETWEEN; domainPortField= new JTextField(); domainPortField.setColumns(30); Box domainBox = Box.createHorizontalBox(); domainBox.add(new JLabel("Tftp upload Domain:")); domainBox.add(domainPortField); pain.add(domainBox); d = domainBox.getPreferredSize(); domainBox.setBounds(left, top, d.width, d.height); top += d.height + GUI_BETWEEN; autoResetPortField= new JTextField(); autoResetPortField.setColumns(8); Box resetBox = Box.createHorizontalBox(); resetBox.add(new JLabel("Auto Reset Port:")); resetBox.add(autoResetPortField); pain.add(resetBox); d = resetBox.getPreferredSize(); resetBox.setBounds(left, top, d.width, d.height); top += d.height + GUI_BETWEEN; tftpPassField = new JTextField(); tftpPassField.setColumns(30); Box tftpBox = Box.createHorizontalBox(); tftpBox.add(new JLabel("Tftp Secret Password:"******"Automatically associate .ino files with Arduino")); pain.add(autoAssociateBox); d = autoAssociateBox.getPreferredSize(); autoAssociateBox.setBounds(left, top, d.width + 10, d.height); right = Math.max(right, left + d.width); top += d.height + GUI_BETWEEN; } // More preferences are in the ... label = new JLabel(_("More preferences can be edited directly in the file")); pain.add(label); d = label.getPreferredSize(); label.setForeground(Color.gray); label.setBounds(left, top, d.width, d.height); right = Math.max(right, left + d.width); top += d.height; // + GUI_SMALL; label = new JLabel(preferencesFile.getAbsolutePath()); final JLabel clickable = label; label.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { Base.openFolder(Base.getSettingsFolder()); } public void mouseEntered(MouseEvent e) { clickable.setForeground(new Color(0, 0, 140)); } public void mouseExited(MouseEvent e) { clickable.setForeground(Color.BLACK); } }); pain.add(label); d = label.getPreferredSize(); label.setBounds(left, top, d.width, d.height); right = Math.max(right, left + d.width); top += d.height; label = new JLabel(_("(edit only when Arduino is not running)")); pain.add(label); d = label.getPreferredSize(); label.setForeground(Color.gray); label.setBounds(left, top, d.width, d.height); right = Math.max(right, left + d.width); top += d.height; // + GUI_SMALL; // [ OK ] [ Cancel ] maybe these should be next to the message? button = new JButton(PROMPT_OK); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { applyFrame(); disposeFrame(); } }); pain.add(button); d2 = button.getPreferredSize(); BUTTON_HEIGHT = d2.height; h = right - (BUTTON_WIDTH + GUI_SMALL + BUTTON_WIDTH); button.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT); h += BUTTON_WIDTH + GUI_SMALL; button = new JButton(PROMPT_CANCEL); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { disposeFrame(); } }); pain.add(button); button.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT); top += BUTTON_HEIGHT + GUI_BETWEEN; // finish up wide = right + GUI_BIG; high = top + GUI_SMALL; // closing the window is same as hitting cancel button dialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { disposeFrame(); } }); ActionListener disposer = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { disposeFrame(); } }; Base.registerWindowCloseKeys(dialog.getRootPane(), disposer); Base.setIcon(dialog); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); dialog.setLocation((screen.width - wide) / 2, (screen.height - high) / 2); dialog.pack(); // get insets Insets insets = dialog.getInsets(); dialog.setSize(wide + insets.left + insets.right, high + insets.top + insets.bottom); // handle window closing commands for ctrl/cmd-W or hitting ESC. pain.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //System.out.println(e); KeyStroke wc = Editor.WINDOW_CLOSE_KEYSTROKE; if ((e.getKeyCode() == KeyEvent.VK_ESCAPE) || (KeyStroke.getKeyStrokeForEvent(e).equals(wc))) { disposeFrame(); } } }); }
public Whiteboard() { setTitle("Distributed Whiteboard"); setResizable(false); btnIcon = new ImageIcon(); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(802, 607); JSplitPane splitPane = new JSplitPane(); splitPane.setAutoscrolls(true); splitPane.setDividerSize(0); getContentPane().add(splitPane, BorderLayout.CENTER); Container drawingCanvas = new Container(); drawingCanvas.setBackground(_bgColor); drawingCanvas.setForeground(_bgColor); splitPane.setRightComponent(drawingCanvas); canvas = new DrawingCanvas(); canvas.setAutoscrolls(true); canvas.setBounds(0, 0, 679, 494); drawingCanvas.add(canvas); JPanel pnlTools = new JPanel(); splitPane.setLeftComponent(pnlTools); GridBagLayout gbl_pnlTools = new GridBagLayout(); gbl_pnlTools.columnWidths = new int[] {45, 30, 0, 0}; gbl_pnlTools.rowHeights = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; gbl_pnlTools.columnWeights = new double[] {1.0, 0.0, 0.0, Double.MIN_VALUE}; gbl_pnlTools.rowWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE}; pnlTools.setLayout(gbl_pnlTools); btnIcon = new ImageIcon("images/free_a.jpg"); btnFreedraw = new JToggleButton(btnIcon); btnFreedraw.setToolTipText("Freedraw"); btnIcon = new ImageIcon("images/free_b.jpg"); btnFreedraw.setSelectedIcon(btnIcon); btnFreedraw.setActionCommand("Freedraw"); btnFreedraw.addActionListener(this); btnFreedraw.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); GridBagConstraints gbc_tglbtnFreedraw = new GridBagConstraints(); gbc_tglbtnFreedraw.insets = new Insets(0, 0, 5, 5); gbc_tglbtnFreedraw.gridx = 0; gbc_tglbtnFreedraw.gridy = 0; pnlTools.add(btnFreedraw, gbc_tglbtnFreedraw); btnIcon = new ImageIcon("images/line_a.jpg"); btnLine = new JToggleButton(btnIcon); btnLine.setToolTipText("Draw line"); btnIcon = new ImageIcon("images/line_b.jpg"); btnLine.setSelectedIcon(btnIcon); btnLine.setActionCommand("Line"); btnLine.addActionListener(this); btnLine.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); GridBagConstraints gbc_btnLine = new GridBagConstraints(); gbc_btnLine.insets = new Insets(0, 0, 5, 5); gbc_btnLine.gridx = 1; gbc_btnLine.gridy = 0; pnlTools.add(btnLine, gbc_btnLine); btnIcon = new ImageIcon("images/circle_a.jpg"); btnCircle = new JToggleButton(btnIcon); btnCircle.setToolTipText("Draw circle"); btnIcon = new ImageIcon("images/circle_b.jpg"); btnCircle.setSelectedIcon(btnIcon); btnCircle.setActionCommand("Circle"); btnCircle.addActionListener(this); btnCircle.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); GridBagConstraints gbc_btnCircle = new GridBagConstraints(); gbc_btnCircle.insets = new Insets(0, 0, 5, 5); gbc_btnCircle.gridx = 0; gbc_btnCircle.gridy = 1; pnlTools.add(btnCircle, gbc_btnCircle); btnIcon = new ImageIcon("images/ellipse_a.jpg"); btnOval = new JToggleButton(btnIcon); btnOval.setToolTipText("Draw ellipse"); btnIcon = new ImageIcon("images/ellipse_b.jpg"); btnOval.setSelectedIcon(btnIcon); btnOval.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); btnOval.setActionCommand("Oval"); btnOval.addActionListener(this); GridBagConstraints gbc_btnOval = new GridBagConstraints(); gbc_btnOval.insets = new Insets(0, 0, 5, 5); gbc_btnOval.gridx = 1; gbc_btnOval.gridy = 1; pnlTools.add(btnOval, gbc_btnOval); btnIcon = new ImageIcon("images/square_a.jpg"); btnSquare = new JToggleButton(btnIcon); btnSquare.setToolTipText("Square"); btnIcon = new ImageIcon("images/square_b.jpg"); btnSquare.setSelectedIcon(btnIcon); btnSquare.setActionCommand("Square"); btnSquare.addActionListener(this); btnSquare.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); GridBagConstraints gbc_btnSquare = new GridBagConstraints(); gbc_btnSquare.insets = new Insets(0, 0, 5, 5); gbc_btnSquare.gridx = 0; gbc_btnSquare.gridy = 2; pnlTools.add(btnSquare, gbc_btnSquare); btnIcon = new ImageIcon("images/rectangle_a.jpg"); btnRectangle = new JToggleButton(btnIcon); btnRectangle.setToolTipText("Draw rectangle"); btnIcon = new ImageIcon("images/rectangle_b.jpg"); btnRectangle.setSelectedIcon(btnIcon); btnRectangle.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); btnRectangle.setActionCommand("Rectangle"); btnRectangle.addActionListener(this); GridBagConstraints gbc_btnRectangle = new GridBagConstraints(); gbc_btnRectangle.insets = new Insets(0, 0, 5, 5); gbc_btnRectangle.gridx = 1; gbc_btnRectangle.gridy = 2; pnlTools.add(btnRectangle, gbc_btnRectangle); btnIcon = new ImageIcon("images/text_a.jpg"); btnText = new JToggleButton(btnIcon); btnText.setToolTipText("Insert text"); btnIcon = new ImageIcon("images/text_b.jpg"); btnText.setSelectedIcon(btnIcon); btnText.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); btnText.setActionCommand("Text"); btnText.addActionListener(this); GridBagConstraints gbc_btnText = new GridBagConstraints(); gbc_btnText.insets = new Insets(0, 0, 5, 5); gbc_btnText.gridx = 0; gbc_btnText.gridy = 3; pnlTools.add(btnText, gbc_btnText); btnIcon = new ImageIcon("images/fill_a.jpg"); btnFill = new JToggleButton(btnIcon); btnFill.setToolTipText("Fill"); btnIcon = new ImageIcon("images/fill_b.jpg"); btnFill.setSelectedIcon(btnIcon); btnFill.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); btnFill.setActionCommand("Fill"); btnFill.addActionListener(this); GridBagConstraints gbc_btnFill = new GridBagConstraints(); gbc_btnFill.insets = new Insets(0, 0, 5, 5); gbc_btnFill.gridx = 1; gbc_btnFill.gridy = 3; pnlTools.add(btnFill, gbc_btnFill); btnIcon = new ImageIcon("images/erase_a.jpg"); btnErase = new JToggleButton(btnIcon); btnErase.setToolTipText("Erase"); btnIcon = new ImageIcon("images/erase_b.jpg"); btnErase.setSelectedIcon(btnIcon); btnErase.setActionCommand("Erase"); btnErase.addActionListener(this); btnErase.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); GridBagConstraints gbc_btnErase = new GridBagConstraints(); gbc_btnErase.insets = new Insets(0, 0, 5, 5); gbc_btnErase.gridx = 0; gbc_btnErase.gridy = 4; pnlTools.add(btnErase, gbc_btnErase); ButtonGroup group = new ButtonGroup(); group.add(btnFreedraw); group.add(btnLine); group.add(btnCircle); group.add(btnOval); group.add(btnSquare); group.add(btnRectangle); group.add(btnText); group.add(btnErase); JPanel pnlPreviews = new JPanel(); GridBagConstraints gbc_pnlPreviews = new GridBagConstraints(); gbc_pnlPreviews.gridwidth = 3; gbc_pnlPreviews.fill = GridBagConstraints.BOTH; gbc_pnlPreviews.gridx = 0; gbc_pnlPreviews.gridy = 8; pnlTools.add(pnlPreviews, gbc_pnlPreviews); GridBagLayout gbl_pnlPreviews = new GridBagLayout(); gbl_pnlPreviews.columnWidths = new int[] {0, 0}; gbl_pnlPreviews.rowHeights = new int[] {0, 0, 0, 0, 0, 0, 0}; gbl_pnlPreviews.columnWeights = new double[] {1.0, Double.MIN_VALUE}; gbl_pnlPreviews.rowWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; pnlPreviews.setLayout(gbl_pnlPreviews); JSeparator separator_2 = new JSeparator(); GridBagConstraints gbc_separator_2 = new GridBagConstraints(); gbc_separator_2.insets = new Insets(0, 0, 5, 0); gbc_separator_2.gridx = 0; gbc_separator_2.gridy = 1; pnlPreviews.add(separator_2, gbc_separator_2); JLabel label = new JLabel(""); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 0); gbc_label.gridx = 0; gbc_label.gridy = 2; pnlPreviews.add(label, gbc_label); lblPenSize = new JLabel("Pen Size"); lblPenSize.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); GridBagConstraints gbc_lblPenSize = new GridBagConstraints(); gbc_lblPenSize.insets = new Insets(0, 0, 5, 0); gbc_lblPenSize.gridx = 0; gbc_lblPenSize.gridy = 3; pnlPreviews.add(lblPenSize, gbc_lblPenSize); cboPenSize = new JComboBox<String>(); cboPenSize.setModel( new DefaultComboBoxModel<String>( new String[] {"1", "2", "4", "6", "8", "10", "12", "14", "16", "18", "20"})); cboPenSize.setSelectedIndex(1); cboPenSize.setToolTipText("Pen and Eraser Size"); GridBagConstraints gbc_cboPenSize = new GridBagConstraints(); gbc_cboPenSize.insets = new Insets(0, 0, 5, 0); gbc_cboPenSize.fill = GridBagConstraints.HORIZONTAL; gbc_cboPenSize.gridx = 0; gbc_cboPenSize.gridy = 4; pnlPreviews.add(cboPenSize, gbc_cboPenSize); cboPenSize.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ie) { _penWidth = Integer.parseInt(cboPenSize.getSelectedItem().toString()); pen.setPen(_penWidth, pen.getPen().getEndCap(), pen.getPen().getLineJoin()); canvas.setPen(pen); revalidate(); } }); pnlColorChooser = new JPanel(); getContentPane().add(pnlColorChooser, BorderLayout.SOUTH); GridBagLayout gbl_pnlColorChooser = new GridBagLayout(); gbl_pnlColorChooser.columnWidths = new int[] {0, 62, 0, 36, 0}; gbl_pnlColorChooser.rowHeights = new int[] {0, 0, 0}; gbl_pnlColorChooser.columnWeights = new double[] {0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; gbl_pnlColorChooser.rowWeights = new double[] {0.0, 0.0, Double.MIN_VALUE}; pnlColorChooser.setLayout(gbl_pnlColorChooser); btnColor = new JButton("Pen Color"); btnColor.setActionCommand("PenColor"); btnColor.addActionListener(this); GridBagConstraints gbc_btnColor = new GridBagConstraints(); gbc_btnColor.insets = new Insets(0, 0, 5, 5); gbc_btnColor.gridx = 0; gbc_btnColor.gridy = 0; pnlColorChooser.add(btnColor, gbc_btnColor); lblColor = new JLabel(""); lblColor.setPreferredSize(new Dimension(79, 23)); lblColor.setMinimumSize(new Dimension(79, 23)); lblColor.setMaximumSize(new Dimension(79, 23)); lblColor.setOpaque(true); lblColor.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, Color.BLACK)); lblColor.setBackground(Color.BLACK); GridBagConstraints gbc_lblColor = new GridBagConstraints(); gbc_lblColor.insets = new Insets(0, 0, 0, 5); gbc_lblColor.gridx = 0; gbc_lblColor.gridy = 1; pnlColorChooser.add(lblColor, gbc_lblColor); JLabel lblSelectedTool = new JLabel("Selected Tool:"); lblSelectedTool.setFont(new Font("Tahoma", Font.ITALIC, 10)); GridBagConstraints gbc_lblSelectedTool = new GridBagConstraints(); gbc_lblSelectedTool.insets = new Insets(0, 0, 0, 5); gbc_lblSelectedTool.gridx = 2; gbc_lblSelectedTool.gridy = 1; pnlColorChooser.add(lblSelectedTool, gbc_lblSelectedTool); lblTool = new JLabel(""); lblTool.setHorizontalAlignment(SwingConstants.LEFT); lblTool.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 12)); GridBagConstraints gbc_lblTool = new GridBagConstraints(); gbc_lblTool.gridx = 3; gbc_lblTool.gridy = 1; pnlColorChooser.add(lblTool, gbc_lblTool); pnlColorChooser.setVisible(true); JMenuBar menuMainMenu = new JMenuBar(); menuMainMenu.setName(""); setJMenuBar(menuMainMenu); JMenu mnFile = new JMenu("File"); mnFile.setActionCommand("File"); menuMainMenu.add(mnFile); mntmNew = new JMenuItem("New"); mntmNew.setMnemonic(KeyEvent.VK_N); mntmNew.setActionCommand("New"); mntmNew.addActionListener(this); mnFile.add(mntmNew); mntmOpen = new JMenuItem("Open"); mntmOpen.setMnemonic(KeyEvent.VK_O); mntmOpen.setActionCommand("Open"); mntmOpen.addActionListener(this); mnFile.add(mntmOpen); JSeparator separator = new JSeparator(); mnFile.add(separator); mntmSave = new JMenuItem("Save"); mntmSave.setMnemonic(KeyEvent.VK_S); mntmSave.setActionCommand("Save"); mntmSave.addActionListener(this); mnFile.add(mntmSave); mntmSaveAs = new JMenuItem("Save As"); mntmSaveAs.setActionCommand("SaveAs"); mntmSaveAs.addActionListener(this); mnFile.add(mntmSaveAs); JSeparator separator_1 = new JSeparator(); mnFile.add(separator_1); mntmExit = new JMenuItem("Exit"); mntmExit.setMnemonic(KeyEvent.VK_E); mntmExit.setActionCommand("Exit"); mntmExit.addActionListener(this); mnFile.add(mntmExit); JMenu mnNetwork = new JMenu("Network"); mnNetwork.setActionCommand("Network"); menuMainMenu.add(mnNetwork); mntmConnect = new JMenuItem("Connect"); mntmConnect.setMnemonic(KeyEvent.VK_C); mntmConnect.setActionCommand("Connect"); mntmConnect.addActionListener(this); mnNetwork.add(mntmConnect); mntmDisconnect = new JMenuItem("Disconnect"); mntmDisconnect.setMnemonic(KeyEvent.VK_D); mntmDisconnect.setActionCommand("Disconnect"); mntmDisconnect.addActionListener(this); mntmDisconnect.setEnabled(false); mnNetwork.add(mntmDisconnect); JSeparator separator_3 = new JSeparator(); mnNetwork.add(separator_3); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeOperation(); } }); }
/** Constructs the GUI */ public Piano(String userID, int userImgNum) { this.userID = userID; this.userImgNum = userImgNum; // ----------- 소켓 생성 ------------ try { sock = new Socket(SERVER_IP, 10001); pw = new PrintWriter(new OutputStreamWriter(sock.getOutputStream())); br = new BufferedReader(new InputStreamReader(sock.getInputStream())); pw.println(this.userImgNum + this.userID); pw.flush(); } catch (Exception ex) { System.out.println("서버와 접속시 오류가 발생하였습니다."); System.out.println(ex); System.exit(1); } //// 현재 클라이언트 수 파악 try { String cnt = br.readLine(); cntClient = Integer.parseInt(cnt); if (cntClient == -1) { JOptionPane.showMessageDialog(null, "게임 도중에 접속할 수 없습니다."); System.exit(0); } else if (cntClient >= 4) { JOptionPane.showMessageDialog(null, "방이 꽉 찼습니다."); System.exit(0); } else if (cntClient == 0) { // 내가 첫 입장이면 this.bMaster = true; pw.println(FLAG_MASTER); pw.flush(); } String bExist = br.readLine(); if (bExist.equals("false")) { JOptionPane.showMessageDialog(null, "동일한 ID가 존재합니다."); System.exit(0); } } catch (IOException e) { e.printStackTrace(); } // ----------- 채팅 스레드 생성----------- InputThread inputThread = new InputThread(sock, br); inputThread.start(); // ------------ Create GUI ----------- frame = new JFrame("Piano GUI"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Create the mainPanel Container mainPanel = frame.getContentPane(); // mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); mainPanel.setLayout(new GridLayout(3, 1, 20, 0)); mainPanel.setForeground(Color.WHITE); mainPanel.setBackground(Color.BLACK); // mainPanel.add(Box.createRigidArea(new Dimension(0,10))); // ---- Instrument and tempo panel // --------------------------------------------------------------- ImagePanel iTpanel = new ImagePanel("images/background1.png"); // iTpanel = new ImagePanel("images/background1.png"); iTpanel.setLayout(new BoxLayout(iTpanel, BoxLayout.X_AXIS)); iTpanel.setForeground(Color.WHITE); iTpanel.setBackground(Color.GREEN); iTpanel.add(Box.createRigidArea(new Dimension(20, 0))); // --- User1 --- userPane1 = new JPanel(); userPane1.setLayout(new BoxLayout(userPane1, BoxLayout.Y_AXIS)); userPane1.setBackground(Color.GRAY); // img + label icon1 = new ImageIcon("images/user.jpg"); UserImage1 = new JLabel(icon1); userPane1.add(UserImage1); // label pane labelPane1 = new JPanel(); labelPane1.setLayout(new BoxLayout(labelPane1, BoxLayout.X_AXIS)); labelPane1.setBackground(Color.GRAY); labelPane1.setMaximumSize(new Dimension(UserImage1.getPreferredSize().width, 20)); UserLabel1 = new JLabel(" "); UserLabel1.setForeground(Color.WHITE); labelPane1.add(UserLabel1); labelPane1.add(Box.createRigidArea(new Dimension(10, 0))); ScoreLabel1 = new JLabel(" "); ScoreLabel1.setForeground(Color.YELLOW); labelPane1.add(ScoreLabel1); labelPane1.setAlignmentX(Component.LEFT_ALIGNMENT); userPane1.add(labelPane1); iTpanel.add(userPane1); iTpanel.add(Box.createRigidArea(new Dimension(10, 0))); // --- User2 --- userPane2 = new JPanel(); userPane2.setLayout(new BoxLayout(userPane2, BoxLayout.Y_AXIS)); userPane2.setBackground(Color.GRAY); // img + label icon2 = new ImageIcon("images/user.jpg"); UserImage2 = new JLabel(icon2); userPane2.add(UserImage2); // label pane labelPane2 = new JPanel(); labelPane2.setLayout(new BoxLayout(labelPane2, BoxLayout.X_AXIS)); labelPane2.setBackground(Color.GRAY); labelPane2.setMaximumSize(new Dimension(UserImage2.getPreferredSize().width, 20)); UserLabel2 = new JLabel(" "); UserLabel2.setForeground(Color.WHITE); labelPane2.add(UserLabel2); labelPane2.add(Box.createRigidArea(new Dimension(10, 0))); ScoreLabel2 = new JLabel(" "); ScoreLabel2.setForeground(Color.YELLOW); labelPane2.add(ScoreLabel2); labelPane2.setAlignmentX(Component.LEFT_ALIGNMENT); userPane2.add(labelPane2); iTpanel.add(userPane2); iTpanel.add(Box.createRigidArea(new Dimension(50, 0))); // 정답 및 힌트 JPanel at = new JPanel(); at.setLayout(new BoxLayout(at, BoxLayout.Y_AXIS)); // at.setLayout(new GridLayout(2,1)); answer = new JLabel("노래 정답", JLabel.CENTER); Border border = BorderFactory.createLineBorder(Color.WHITE, 2); answer.setBorder(border); answer.setForeground(Color.WHITE); answer.setBackground(Color.BLACK); answer.setOpaque(true); answer.setSize(5, 5); at.add(answer); time = new JLabel("시간", JLabel.CENTER); time.setBorder(border); time.setForeground(Color.WHITE); time.setBackground(Color.BLACK); time.setOpaque(true); time.setSize(10, 5); at.add(time); // ----------- 시간 스레드 생성----------- // tt = new TimeThread(time,sock,pw); iTpanel.add(at); iTpanel.add(Box.createRigidArea(new Dimension(80, 0))); /*JLabel time = new JLabel("시간",JLabel.CENTER); time.setForeground(Color.WHITE); time.setBackground(Color.BLACK); time.setOpaque(true); iTpanel.add(time);*/ // ImageIcon hintImg = new ImageIcon("images/hint01.jpg"); hintImg = new ImageIcon("images/hint0.png"); hint = new JLabel(hintImg); hint.setForeground(Color.BLACK); iTpanel.add(hint); iTpanel.add(Box.createRigidArea(new Dimension(300, 0))); // Add iTpanel to mainPanel mainPanel.add(iTpanel); // -------- piano keys panel // ----------------------------------------------------------------------------------- JLayeredPane pianoKeyPanel = makeKeys(); mainPanel.add(pianoKeyPanel); // ---- Buttom panel // ---------------------------------------------------------------------------------- ImagePanel iTpane2 = new ImagePanel("images/background3.png"); iTpane2.setLayout(new BoxLayout(iTpane2, BoxLayout.X_AXIS)); iTpane2.setForeground(Color.WHITE); iTpane2.setBackground(Color.BLACK); iTpane2.add(Box.createRigidArea(new Dimension(100, 0))); // Instrument List JPanel controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); InstList = new List(4, false); InstList.add("피아노"); InstList.add("기타"); InstList.add("비브라폰"); InstList.add("바이올린"); InstList.addActionListener(this); controlPanel.setOpaque(false); controlPanel.add(InstList); iTpane2.add(controlPanel); InstList.select(0); // ---- chatting pane ---- JPanel chatPane = new JPanel(); chatPane.setLayout(new BorderLayout(0, 5)); chatPane.setBackground(Color.BLACK); // chatting box chatBox = new JTextArea(); chatBox.setFont(new Font("Ariel", Font.PLAIN, 14)); JScrollPane scrollPane = new JScrollPane(chatBox); chatPane.add(scrollPane, BorderLayout.CENTER); // ---chat write box (input)---- JPanel chatInputPane = new JPanel(); chatInputPane.setLayout(new BoxLayout(chatInputPane, BoxLayout.X_AXIS)); // chatInputText 채팅 입력 창 chatInputText = new JTextField(); chatInputText.setFont(new Font("Ariel", Font.PLAIN, 14)); chatInputText.addActionListener(this); chatInputPane.add(chatInputText); // Send Button chatBtn = new JButton("send"); chatBtn.addActionListener(this); chatBtn.setName("chatBtn"); chatInputPane.add(chatBtn); chatPane.add(chatInputPane, BorderLayout.SOUTH); // attach iTpane2.add(chatPane); iTpane2.add(Box.createRigidArea(new Dimension(10, 0))); // start button btStart = new JButton("start"); btStart.addActionListener(this); btStart.setName("btStart"); iTpane2.add(btStart); iTpane2.add(Box.createRigidArea(new Dimension(10, 0))); btStart.setEnabled(false); // User userPane3 = new JPanel(); userPane3.setLayout(new BoxLayout(userPane3, BoxLayout.Y_AXIS)); userPane3.setBackground(Color.GRAY); icon3 = new ImageIcon("images/user.jpg"); UserImage3 = new JLabel(icon3); userPane3.add(UserImage3); // label pane labelPane3 = new JPanel(); labelPane3.setLayout(new BoxLayout(labelPane3, BoxLayout.X_AXIS)); labelPane3.setBackground(Color.GRAY); labelPane3.setMaximumSize(new Dimension(UserImage3.getPreferredSize().width, 20)); UserLabel3 = new JLabel(" "); UserLabel3.setForeground(Color.WHITE); labelPane3.add(UserLabel3); labelPane3.add(Box.createRigidArea(new Dimension(10, 0))); ScoreLabel3 = new JLabel(" "); ScoreLabel3.setForeground(Color.YELLOW); labelPane3.add(ScoreLabel3); labelPane3.setAlignmentX(Component.LEFT_ALIGNMENT); userPane3.add(labelPane3); iTpane2.add(userPane3); iTpane2.add(Box.createRigidArea(new Dimension(10, 0))); userPane4 = new JPanel(); userPane4.setLayout(new BoxLayout(userPane4, BoxLayout.Y_AXIS)); userPane4.setBackground(Color.GRAY); icon4 = new ImageIcon("images/user.jpg"); UserImage4 = new JLabel(icon4); userPane4.add(UserImage4); // label pane labelPane4 = new JPanel(); labelPane4.setLayout(new BoxLayout(labelPane4, BoxLayout.X_AXIS)); labelPane4.setBackground(Color.GRAY); labelPane4.setMaximumSize(new Dimension(UserImage4.getPreferredSize().width, 20)); UserLabel4 = new JLabel(" "); UserLabel4.setForeground(Color.WHITE); labelPane4.add(UserLabel4); labelPane4.add(Box.createRigidArea(new Dimension(10, 0))); ScoreLabel4 = new JLabel(" "); ScoreLabel4.setForeground(Color.YELLOW); labelPane4.add(ScoreLabel4); labelPane4.setAlignmentX(Component.LEFT_ALIGNMENT); userPane4.add(labelPane4); iTpane2.add(userPane4); iTpane2.add(Box.createRigidArea(new Dimension(20, 0))); // Add iTpanel to mainPanel mainPanel.add(iTpane2); // mainPanel.add(Box.createRigidArea(new Dimension(0,20))); // Show the window frame.setVisible(true); frame.setResizable(false); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation( (screenSize.width - frame.getWidth()) / 2 - 450, (screenSize.height - frame.getHeight()) / 2 - 290); frame.setSize(900, 580); } // 생성자 끝