Boa tarde pessoal tudo bem ?
Estou aqui fazendo uns testes com action em swing e me bateu uma dúvida:
Minha classe:
package view;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRootPane;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import com.birosoft.liquid.LiquidLookAndFeel;
import controller.infra.msg.MensagensEnum;
public class MainView extends JFrame implements ActionListener{
public JMenuItem menuTelaDois;
/**
* Contrutor da classe.
*/
public MainView(){
alteraLayout();
setSize(new Dimension(500,500));
setJMenuBar(criaMenubar());
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* Método responsável por setar o layout no estilo MAC.
*/
private void alteraLayout(){
try {
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
UIManager.setLookAndFeel(new com.birosoft.liquid.LiquidLookAndFeel());
LiquidLookAndFeel.setLiquidDecorations(true,"mac");
LiquidLookAndFeel.setShowTableGrids(true);
LiquidLookAndFeel.setStipples(false);
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, MensagensEnum.ERRO_LAYOUT, "ERRO", JOptionPane.ERROR);
}
}
public JMenuBar criaMenubar() {
JMenuBar menuBar = new JMenuBar();
JMenu menuArquivo = new JMenu("Arquivo");
JMenu menuNovo = new JMenu("Novo");
JMenuItem menuTelaUm = new JMenuItem("Layout Um", new ImageIcon("src/view/images/logo.png"));
menuTelaDois = new JMenuItem("Layout Dois", KeyEvent.VK_L);
menuTelaDois.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK));
menuTelaDois.addActionListener(this);
JMenuItem menuTelaTres = new JMenuItem("Layout Três");
menuNovo.add(menuTelaUm);
menuNovo.add(menuTelaDois);
menuNovo.add(menuTelaTres);
JMenuItem menuAbrir = new JMenuItem("Abrir...");
JMenuItem menuSair = new JMenuItem("Sair");
menuArquivo.add(menuNovo);
menuArquivo.add(menuAbrir);
menuArquivo.addSeparator();
menuArquivo.add(menuSair);
menuBar.add(menuArquivo);
return menuBar;
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == menuTelaDois ){
System.out.println("Entrou no metodo da ação");
}
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
MainView main = new MainView();
}
}
Preste atenção neste detalhe:
menuTelaDois = new JMenuItem("Layout Dois", KeyEvent.VK_L);
menuTelaDois.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK));
menuTelaDois.addActionListener(this);
E no metodo que eu implementei:
public void actionPerformed(ActionEvent e){
if (e.getSource() == menuTelaPraxy ){
System.out.println("Entrou no metodo da ação");
}
}
tudo bem até aqui.
A minha grande dúvida é a seguinte, em uma estrutura MVC, como eu posso implementar este metodo em uma classe controller, para que eu não tenha que instanciar nada da camada de controle aqui dentro do metodo que está na view ?
Não sei se fui claro:S se alguem tiver dúvida por favor pergunte