Eu estou tentando praticar um pouco MVC porém estou com algumas dificuldades
Eu tenho meu controller:
public class ControllerLogin implements ActionListener {
//view
ViewLogin loginView;
FuncionarioDAO funcionario;
public ControllerLogin(FuncionarioDAO f, ViewLogin l) {
loginView = l;
funcionario = f;
actionListener(this);
}
// getters and setters do controller
public ViewLogin getLoginView() {
return loginView;
}
public void setLoginView(ViewLogin loginView) {
this.loginView = loginView;
}
@SuppressWarnings("unused")
@Override
public void actionPerformed(ActionEvent e) {
try
{
//retrieve the input from View
@SuppressWarnings("unused")
String a=loginView.getLogin().getText();
@SuppressWarnings("deprecation")
String b=loginView.getPassword().getText();
boolean bx = funcionario.Autenticar(a, b);
}
catch(Exception ee)
{
ee.printStackTrace();
}
}
public void actionListener(ActionListener ae)
{
loginView.getEntrar().addActionListener(ae);
}
}
meu view:
public class ViewLogin extends JFrame {
Container con;
private static final int FRAME_WIDTH = 400;
static final int FRAME_HEIGHT = 350;
static final int FRAME_X_ORIGIN = 150;
static final int FRAME_Y_ORIGIN = 150;
static final int BUTTON_WIDTH = 90;
static final int BUTTON_HEIGHT = 30;
JPanel Logo;
JPanel Items;
JPanel Footer;
JLabel label1,label2;
private JTextField login;
private JPasswordField password;
private JButton entrar;
JButton registrar;
/**
* Create the frame.
*/
public ViewLogin() {
con=getContentPane();
//Set the frame properties
setSize (FRAME_WIDTH, FRAME_HEIGHT);
// setResizable (false);
setTitle ("market v1");
setLocation (FRAME_X_ORIGIN, FRAME_Y_ORIGIN);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setLogin(new JTextField("",10));
setPassword(new JPasswordField("",10));
Items = new JPanel(new GridLayout(3,1));
setEntrar(new JButton("Entrar"));
getEntrar().setBounds(100, 285, BUTTON_WIDTH, BUTTON_HEIGHT);
registrar = new JButton("Registrar");
registrar.setBounds(195, 285, BUTTON_WIDTH, BUTTON_HEIGHT);
label1 = new JLabel();
label1.setText("Username:");
label2 = new JLabel();
label2.setText("Password:");
Items.add(label1);
Items.add(getLogin());
Items.add(label2);
Items.add(getPassword());
Items.add(getEntrar());
Items.add(registrar);
add(Items,BorderLayout.CENTER);
setVisible(true);
}
public JTextField getLogin() {
return login;
}
public void setLogin(JTextField login) {
this.login = login;
}
public JPasswordField getPassword() {
return password;
}
public void setPassword(JPasswordField password) {
this.password = password;
}
public JButton getEntrar() {
return entrar;
}
public void setEntrar(JButton entrar) {
this.entrar = entrar;
}
}
creio que não seja preciso meu model
isso funcionou em partes:
porém os eventos do button eu não sei como por
eu tenho um button entrar que irá validar o login
alguém poderia me ajuda? como adicionar esse evento pelo controller ( e como pegar o que é digitado pelo user .)
alguém pff? Melhorei a questão .
O tratamento de eventos acontece na view.
Lá você tem um botão, adicionou um listener à ele e esse listener simplesmente vai avisar o controller sobre qual botão foi pressionado, aí o controller decide o que fazer.
você poderia me ajudar nisso? eu não estou conseguindo imaginar em como fazer isso .
Primeiro tira o ActionListener do seu Controller e implementa na sua própria tela utilizando inner class ou lambda.
xMinato:
public void adicionarOuvinteLogin (ActionListener ouvinte) {
this.entrar.addActionListener(ouvinte);
this.registrar.addActionListener(ouvinte);
}
seria algo parecido com isso na minha classe view?
Mas agora eu tou com dúvida em como chamar o meu metodo de validação na classe do controller
public void adicionarOuvinteLogin (ActionListener ouvinte) {
this.entrar.addActionListener(ouvinte);
this.registrar.addActionListener(ouvinte);
}
seria algo parecido com isso na minha classe view?
Mas agora eu tou com dúvida em como chamar o meu metodo de validação na classe do controller
Não
Por que você criou getter e setters para os componentes da sua view ? Não faz sentido.
Sua view deveria ter uma referência ao controller dela, justamente para poder fazer algo do tipo:
objetoController.pressioneiBotaoX();
staroski:
Não
Por que você criou getter e setters para os componentes da sua view ? Não faz sentido.
Sua view deveria ter uma referência ao controller dela, justamente para poder fazer algo do tipo:
objetoController.pressioneiBotaoX();
eu consegui fazer dessa forma:
controller:
public class ControllerLogin {
//view
private ViewLogin loginView;
private FuncionarioDAO funcionario;
private ActionListener actionListener;
public ControllerLogin(FuncionarioDAO funcionario, ViewLogin loginView) {
this.funcionario = funcionario;
this.loginView = loginView;
}
public void contol(){
actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
validar();
}
};
loginView.getEntrar().addActionListener(actionListener);
}
@SuppressWarnings("deprecation")
private void validar(){
String a=loginView.getLogin().getText();
String b=loginView.getPassword().getText();
boolean bx = funcionario.Autenticar(a, b);
}
main:
public static void main(String[] args) {
// TODO Auto-generated method stub
ViewLogin view = new ViewLogin();
FuncionarioDAO funcionario = new FuncionarioDAO();
ControllerLogin controller = new ControllerLogin(funcionario,view);
controller.contol();
}
e o meu view:
public ViewLogin() {
con=getContentPane();
//Set the frame properties
setSize (FRAME_WIDTH, FRAME_HEIGHT);
// setResizable (false);
setTitle ("market v1");
setLocation (FRAME_X_ORIGIN, FRAME_Y_ORIGIN);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setLogin(new JTextField("",10));
setPassword(new JPasswordField("",10));
Items = new JPanel(new GridLayout(3,1));
setEntrar(new JButton("Entrar"));
getEntrar().setBounds(100, 285, BUTTON_WIDTH, BUTTON_HEIGHT);
registrar = new JButton("Registrar");
registrar.setBounds(195, 285, BUTTON_WIDTH, BUTTON_HEIGHT);
label1 = new JLabel();
label1.setText("Username:");
label2 = new JLabel();
label2.setText("Password:");
Items.add(label1);
Items.add(getLogin());
Items.add(label2);
Items.add(getPassword());
Items.add(getEntrar());
Items.add(registrar);
add(Items,BorderLayout.CENTER);
setVisible(true);
}
public JTextField getLogin() {
return login;
}
public void setLogin(JTextField login) {
this.login = login;
}
public JPasswordField getPassword() {
return password;
}
public void setPassword(JPasswordField password) {
this.password = password;
}
public JButton getEntrar() {
return entrar;
}
public void setEntrar(JButton entrar) {
this.entrar = entrar;
}
não sei muito bem se é o modelo correto
vc poderia me ajudar com dicas de como melhorar isso?
Olá. Estou implementando um projeto no momento, usando o padrão de projeto MVC.
Se você quiser posso mandar um módulo (Login) e você vê como implemento o padrão e roda na sua máquina… Avise-me se tiver interesse…
xMinato
Julho 27, 2019, 12:47am
#11
opa mano tenho interesse sim se você poder eu fiz desse jeito, mas não sei se é a melhor maneira.
lo[quote=“lemosmoises, post:12, topic:390394, full:true”]
Qual seu email?
[/quote]
binnol2rvgh@gmail.com
Amanhã, te envio, vou precisar isolar parte do código… Amanhã analiso o seu melhor…
2 curtidas
Eu dei uma olhada no seu código. Acho que está correto sim. Você está implementando o padrão MVC do mesmo modo que eu. Aliás, acho que está no caminho correto, pois a maneira que fez segue a metodologia que eu vi no livro “Java com Programar” de Deitel…
Já fiz o envio do módulo de Login no seu email… favor verificar
1 curtida