/** * @author Daniel Faria Jr. RA:962137 * @version 1.0 * Data: 04/06/2001 * Ult. Atualizacao: 28/06/2001 */ package pckInterface; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.File; /** * Classe principal do projeto que inicia o projeto. */ public class Main extends JFrame { private static String strAbreArq = "Abrir Arquivo"; private static String strZoomIn = "Zoom In"; private static String strZoomOut = "Zoom Out"; private static String strOtimiza = "Otimiza"; private static String strVeiculos = "Veículos: "; private static String strEncomendas = "Encomendas: "; private static String strCusto = "Custo: "; private static String strCusto2 = "Custo: "; private static String strArqVeiculo = "Selecione arquivo do veículo: "; private static String strArqEncomenda = "Selecione arquivo da encomenda: "; private static String strArqMapa = "Selecione arquivo do mapa: "; private static String strCaminhoZoomIn = Constantes.dirImagens + "/" + Constantes.iconZoomIn; private static String strCaminhoZoomOut = Constantes.dirImagens + "/" + Constantes.iconZoomOut; private static String strCaminhoAbreArq = Constantes.dirImagens + "/" + Constantes.iconAbreArq; private static String strCaminhoOtimiza = Constantes.dirImagens + "/" + Constantes.iconOtimiza; private String nomeArq = null; private String tipoArq = ""; private int rows = 4; private int cols = 20; private int varY = 0; //Linha em que se encontra (contém valor inicial) String[] listVeiculos = { "Veiculo 01", "Veiculo 02", "Veiculo 03", "Veiculo 04"}; String[] listEncomendas = { "Encomenda 01", "Encomenda 02", "Encomenda 03"}; JComboBox cmbVeiculos = new JComboBox(listVeiculos); JComboBox cmbEncomendas = new JComboBox(listEncomendas); JLabel lblAbreArq = new JLabel(strAbreArq); JLabel lblVeiculos = new JLabel(strVeiculos, SwingConstants.RIGHT); JLabel lblEncomendas = new JLabel(strEncomendas, SwingConstants.RIGHT); JLabel lblCusto = new JLabel(strCusto, SwingConstants.RIGHT); JLabel lblCusto2 = new JLabel(strCusto2, SwingConstants.RIGHT); JLabel lblArqVeiculo = new JLabel(strArqVeiculo, SwingConstants.RIGHT); JLabel lblArqEncomenda = new JLabel(strArqEncomenda, SwingConstants.RIGHT); JLabel lblArqMapa = new JLabel(strArqMapa, SwingConstants.RIGHT); JTextArea txtVeiculos = new JTextArea(rows, cols); JTextArea txtEncomendas = new JTextArea(rows, cols); JTextField txtCusto = new JTextField(cols); JTextField txtCusto2 = new JTextField(cols); JTextField txtArqVeiculo = new JTextField(cols); JTextField txtArqEncomenda = new JTextField(cols); JTextField txtArqMapa = new JTextField(cols); Dimension frameSize = this.getSize(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); JPanel pane = new JPanel(); //Painel com mapa Painel paneMap; JMenuBar menuBar; JMenu menu, submenu; JMenuItem menuItem; /** * Construtor do programa principal que adiciona componentes à interface. */ public Main() { Component contents = this.createComponents(); this.getContentPane().add(contents); this.redimensionaJanela(); } /** * Método que redimensiona frame principal */ public void redimensionaJanela() { //Center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setSize(screenSize.width - 30, screenSize.height - 30); } /** * Cria o Menu Bar com as opções disponíveis. */ public void criaMenu() { //Cria menu bar. menuBar = new JMenuBar(); setJMenuBar(menuBar); //Constroi o primeiro first menu. /*menu = new JMenu("Arquivos"); menu.setMnemonic(KeyEvent.VK_A); menu.getAccessibleContext().setAccessibleDescription("Menu de Arquivos"); menuBar.add(menu); //a group of JMenuItems menuItem = new JMenuItem("Abrir...", KeyEvent.VK_A); menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_A, ActionEvent.ALT_MASK)); menuItem.getAccessibleContext().setAccessibleDescription( "Abrir arquivo"); menu.add(menuItem);*/ // TOOLBAR JToolBar toolBar = new JToolBar(); addButtons(toolBar); menuBar.add(toolBar); /*menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { button_actionPerformed(e); } });*/ this.setJMenuBar(menuBar); } /** * Configura opções gerais para exibição do JPanel principal. */ public void configuraOpcoesGerais() { pane.setLayout(gridbag); c.fill = GridBagConstraints.BOTH; } /** * Configura componentes (JLabel, JTextField e JButton) para abertura dos arquivos. */ public void configuraArqsComponents() { // LABEL ABRE ARQ.VEÍCULO c.gridwidth = 2; c.gridx = Constantes.eixoX; //Coluna c.gridy = Constantes.eixoY; //Linha gridbag.setConstraints(lblArqVeiculo, c); pane.add(lblArqVeiculo); //TEXT FIELD c.gridwidth = 3; c.gridx = Constantes.eixoX + 2; //Coluna c.gridy = Constantes.eixoY; //Linha gridbag.setConstraints(txtArqVeiculo, c); pane.add(txtArqVeiculo); // BUTTON - Abre Arq.Veículo Button ImageIcon icon = new ImageIcon(strCaminhoZoomIn); JButton button = new JButton("Veículo", icon); button.setHorizontalAlignment(SwingConstants.LEFT); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tipoArq = Constantes.strVeiculo; abreArquivo_actionPerformed(e); } }); button.setMnemonic(KeyEvent.VK_I); c.gridwidth = 1; c.gridx = Constantes.eixoX + 5; //Coluna c.gridy = Constantes.eixoY; //Linha gridbag.setConstraints(button, c); pane.add(button); varY++; //Atualiza valor da linha // LABEL ABRE ARQ.ENCOMENDA c.gridwidth = 2; c.gridx = Constantes.eixoX; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(lblArqEncomenda, c); pane.add(lblArqEncomenda); //TEXT FIELD c.gridwidth = 3; c.gridx = Constantes.eixoX + 2; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(txtArqEncomenda, c); pane.add(txtArqEncomenda); // BUTTON - Abre Arq.Encomenda Button icon = new ImageIcon(strCaminhoZoomIn); button = new JButton("Encomenda", icon); button.setHorizontalAlignment(SwingConstants.LEFT); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tipoArq = Constantes.strEncomenda; abreArquivo_actionPerformed(e); } }); button.setMnemonic(KeyEvent.VK_I); c.gridwidth = 1; c.gridx = Constantes.eixoX + 5; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(button, c); pane.add(button); varY++; //Atualiza valor da linha // LABEL ABRE ARQ.MAPA c.gridwidth = 2; c.gridx = Constantes.eixoX; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(lblArqMapa, c); pane.add(lblArqMapa); //TEXT FIELD c.gridwidth = 3; c.gridx = Constantes.eixoX + 2; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(txtArqMapa, c); pane.add(txtArqMapa); // BUTTON - Abre Arq.Veículo Button icon = new ImageIcon(strCaminhoZoomIn); button = new JButton("Mapa", icon); button.setHorizontalAlignment(SwingConstants.LEFT); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tipoArq = Constantes.strMapa; abreArquivo_actionPerformed(e); } }); button.setMnemonic(KeyEvent.VK_I); c.gridwidth = 1; c.gridx = Constantes.eixoX + 5; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(button, c); pane.add(button); varY++; //Atualiza valor da linha // BUTTON - Abre Arq.Veículo Button icon = new ImageIcon(strCaminhoZoomIn); button = new JButton("Executar", icon); button.setHorizontalAlignment(SwingConstants.CENTER); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //abreArquivo_actionPerformed(e); } }); button.setMnemonic(KeyEvent.VK_I); c.gridwidth = 6; c.gridx = Constantes.eixoX; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(button, c); pane.add(button); } /** * Configura Painel com Mapa */ public void configuraMapPanel() { varY++; //Atualiza valor da linha // PAINEL COM MAPA (MAIOR) paneMap = new Painel(); c.weightx = 1.0; c.gridwidth = 4; c.gridheight = 3; c.ipadx = 0; c.gridx = Constantes.eixoX; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(paneMap, c); pane.add(paneMap); // PAINEL COM MAPA (MENOR) paneMap = new Painel(); c.weightx = 0.5; c.gridwidth = 2; c.gridheight = 1; c.gridx = Constantes.eixoX + 4; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(paneMap, c); pane.add(paneMap); } /** * Configura Botões (Abrir Arquivo, Zoom In, Zoom Out, ...) */ public void configuraButtons() { varY++; //Atualiza valor da linha // Zoom In Button ImageIcon icon = new ImageIcon(strCaminhoZoomIn); JButton button = new JButton(strZoomIn, icon); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); button.setMnemonic(KeyEvent.VK_I); c.gridwidth = 1; c.gridx = Constantes.eixoX + 4; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(button, c); pane.add(button); // Zoon Out Button icon = new ImageIcon(strCaminhoZoomOut); button = new JButton(strZoomOut, icon); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); button.setMnemonic(KeyEvent.VK_O); c.gridwidth = 1; c.gridx = Constantes.eixoX + 5; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(button, c); pane.add(button); varY++; //Atualiza valor da linha // Abre arquivo Mapa Button icon = new ImageIcon(strCaminhoAbreArq); button = new JButton(strAbreArq, icon); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tipoArq = Constantes.strMapa; abreArquivo_actionPerformed(e); } }); button.setMnemonic(KeyEvent.VK_A); c.gridwidth = 1; c.gridx = Constantes.eixoX + 4; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(button, c); pane.add(button); // Otimiza Button icon = new ImageIcon(strCaminhoOtimiza); button = new JButton(strOtimiza, icon); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); button.setMnemonic(KeyEvent.VK_M); c.gridwidth = 1; c.gridx = Constantes.eixoX + 5; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(button, c); pane.add(button); } /** * Configura campos de exibições das informações de Veiculos e encomendas */ public void configuraVeiculosEncomendas() { varY++; //Atualiza valor da linha // LABEL VEICULOS c.gridwidth = 1; c.gridx = Constantes.eixoX; //Coluna c.gridy = Constantes.eixoY + varY; //Linha gridbag.setConstraints(lblVeiculos, c); pane.add(lblVeiculos); //COMBO VEICULOS c.gridwidth = 2; c.gridx = Constantes.eixoX + 1; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(cmbVeiculos, c); pane.add(cmbVeiculos); cmbVeiculos.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { actionVeiculos(e); } }); // LABEL ENCOMENDAS c.gridwidth = 1; c.gridx = Constantes.eixoX + 3; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(lblEncomendas, c); pane.add(lblEncomendas); //COMBO ENCOMENDAS c.gridwidth = 2; c.gridx = Constantes.eixoX + 4; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(cmbEncomendas, c); pane.add(cmbEncomendas); cmbEncomendas.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { actionEncomendas(e); } }); varY++; //Atualiza linha // TEXT AREA VEICULOS txtVeiculos.setFont(new Font("Times New Roman", Font.PLAIN, 12)); txtVeiculos.setLineWrap(true); txtVeiculos.setWrapStyleWord(true); JScrollPane scrollVeiculos = new JScrollPane(txtVeiculos); scrollVeiculos.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollVeiculos.setBorder( BorderFactory.createCompoundBorder( BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Dados - Veículo"), BorderFactory.createEmptyBorder(0,0,0,0)), scrollVeiculos.getBorder())); c.gridwidth = 2; c.gridx = Constantes.eixoX + 1; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(scrollVeiculos, c); pane.add(scrollVeiculos); // TEXT AREA ENCOMENDAS txtEncomendas.setFont(new Font("Times New Roman", Font.PLAIN, 12)); txtEncomendas.setLineWrap(true); txtEncomendas.setWrapStyleWord(true); JScrollPane scrollEncomendas = new JScrollPane(txtEncomendas); scrollEncomendas.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollEncomendas.setBorder( BorderFactory.createCompoundBorder( BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Dados - Encomenda"), BorderFactory.createEmptyBorder(0,0,0,0)), scrollEncomendas.getBorder())); c.gridwidth = 2; c.gridx = Constantes.eixoX + 4; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(scrollEncomendas, c); pane.add(scrollEncomendas); varY++; //Atualiza linha // LABEL CUSTO c.gridwidth = 1; c.gridx = Constantes.eixoX; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(lblCusto, c); pane.add(lblCusto); //TEXT FIELD CUSTO c.gridwidth = 2; c.gridx = Constantes.eixoX + 1; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(txtCusto, c); pane.add(txtCusto); // LABEL CUSTO c.gridwidth = 1; c.gridx = Constantes.eixoX + 3; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(lblCusto2, c); pane.add(lblCusto2); //TEXT FIELD CUSTO c.gridwidth = 2; c.gridx = Constantes.eixoX + 4; //Define a ordem a ser exibida no eixo X c.gridy = Constantes.eixoY + varY; //Define a ordem a ser exibida no eixo Y gridbag.setConstraints(txtCusto2, c); pane.add(txtCusto2); } /** * Método que realiza uma determinada ação caso seja selecionado uma Veiculo */ public void actionVeiculos(ActionEvent e) { txtVeiculos.setText("Hora : " + "12h30min \n"); txtVeiculos.setText(txtVeiculos.getText() + cmbVeiculos.getSelectedItem().toString()); txtCusto.setText("Custo Veículo : " + cmbVeiculos.getSelectedItem().toString()); this.repaint(); } /** * Método que realiza uma determinada ação caso seja selecionado uma Encomenda */ public void actionEncomendas(ActionEvent e) { txtEncomendas.setText("Hora : " + "15h30min \n"); txtEncomendas.setText(txtEncomendas.getText() + cmbEncomendas.getSelectedItem().toString()); txtCusto2.setText("Custo Encomenda : " + cmbEncomendas.getSelectedItem().toString()); this.repaint(); } /** * Método que cria os componentes no frame principal * @return Retorna um Component contendo todos os componentes internos do frame. */ public Component createComponents() { // JMENU this.criaMenu(); // Opções gerais do JPanel this.configuraOpcoesGerais(); // Configura Compenentes de abertura de arqs. this.configuraArqsComponents(); //** em criacao ** // Configura Painel com Mapa this.configuraMapPanel(); // Abrir Arquivo Button this.configuraButtons(); // Configura campos de exibições das informações de Veiculos e encomendas this.configuraVeiculosEncomendas(); //Image image = Toolkit.getDefaultToolkit().getImage(Constantes.dirImagens + // "/middle.gif"); //ImagePanel pane = new ImagePanel(image); pane.reshape(0, 0, frameSize.width, frameSize.height); pane.setBackground(Color.lightGray); return pane; } /** * Adiciona botões ao ToolBar */ protected void addButtons(JToolBar toolBar) { JButton button = null; //first button button = new JButton(new ImageIcon(strCaminhoAbreArq)); button.setToolTipText(strAbreArq); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tipoArq = Constantes.strMapa; abreArquivo_actionPerformed(e); } }); toolBar.add(button); //second button button = new JButton(new ImageIcon(strCaminhoZoomIn)); button.setToolTipText(strZoomIn); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); toolBar.add(button); //third button button = new JButton(new ImageIcon(strCaminhoZoomOut)); button.setToolTipText(strZoomOut); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); toolBar.add(button); //fourth button button = new JButton(new ImageIcon(strCaminhoOtimiza)); button.setToolTipText(strOtimiza); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); toolBar.add(button); } /** * Action Performed para abrir arquivo */ private void abreArquivo_actionPerformed(ActionEvent e) { this.repaint(); this.AbreTelaArq(); } /** * Exibe tela para se selecionar o arquivo que se deseja abrir. */ private void AbreTelaArq() { //Create a file chooser final EscolhaArquivo ea = new EscolhaArquivo(this, Constantes.dirDados); //Create the open button int returnVal = ea.abrirArquivo(tipoArq); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = ea.getSelectedFile(); nomeArq = file.getAbsolutePath(); if (!file.exists()) { MensagensUsuario.MensagemErro(this, MensagensUsuario.MSG_ERR_ABREARQ, MensagensUsuario.TIT_ERR_USUARIO); AbreTelaArq(); } } else nomeArq = null; this.repaint(); ea.removeAll(); return; } /** * Método principal que inicia o projeto. */ public static void main(String[] args) { /*try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { }*/ //Create the top-level container and add contents to it. Main window = new Main(); //Finish setting up the frame, and show it. window.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); //this.dispose(); } }); window.setTitle("MC726 - Sistema de Gerenciamento de Rotas"); window.setBackground(Color.lightGray); window.repaint(); window.setVisible(true); } } /** * Classe auxiliar que configura o JPanel (painel) a ser inserido no JFrame do projeto. */ class ImagePanel extends JPanel { /** Imagem a ser inserida no JPanel. */ Image image; /** * Construtor do ImagePanel incluindo uma imagem ao painel JPanel. * @param image Um objeto Image contendo a imagem a ser incluída. */ public ImagePanel(Image image) { this.image = image; } /** * Método que desenha as imagens necessárias na janela principal do projeto. * @param g Um objeto Graphics para desenhar a imagem. */ public void paintComponent(Graphics g) { super.paintComponent(g); //paint background //Draw image at its natural size first. g.drawImage(image, 0, 0, this); //85x62 image //Now draw the image scaled. g.drawImage(image, 90, 0, 300, 62, this); /*int w = 100; int h = 100; int[] pix = new int[w * h]; int index = 0; for (int y = 0; y < h; y++) { int red = (y * 255) / (h - 1); for (int x = 0; x < w; x++) { int blue = (x * 255) / (w - 1); pix[index++] = (255 << 24) | (red << 16) | blue; } } //Image img = createImage(new MemoryImageSource(w, h, pix, 0, w)); g.drawImage(img, 90, 0, 300, 62, this); */ } }