Tôi đang cố gắng viết một ví dụ Java thực sự đơn giản để tìm hiểu MVC. Đó là một JButton khi nhấn tăng số lượt truy cập và hiển thị số lần nhấp cho đến thời điểm này.Java Click Counter sử dụng MVC
I bùng nổ Model, View và Controller vào các lớp riêng biệt, và nghĩ rằng tôi đang trên con đường đúng đắn, nhưng khi tôi nhấp vào nút JLabel hiển thị bộ đếm tiếp tục ở lại 0.
Có thể ai đó hãy xem nhanh và xem tại sao JLabel hiển thị số lượng nhấp chuột luôn ở mức 0?
Cảm ơn
View
package mvc;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class View extends javax.swing.JFrame {
private JButton jButton1;
private JLabel jLabel1;
private Controller c;
private Model m;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Controller c = new Controller();
Model m = new Model();
View inst = new View(c,m);
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public View(Controller c, Model m) {
super();
this.c = c;
this.m = m;
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
jButton1 = new JButton();
getContentPane().add(jButton1, "Center");
jButton1.setText("Click");
jButton1.setBounds(314, 180, 101, 34);
jButton1.addActionListener(c);
}
{
jLabel1 = new JLabel();
getContentPane().add(getJLabel1());
jLabel1.setText("Click Count = " + c.getClickCount());
jLabel1.setBounds(439, 183, 91, 27);
}
pack();
this.setSize(818, 414);
} catch (Exception e) {
//add your error handling code here
e.printStackTrace();
}
}
public JLabel getJLabel1() {
return jLabel1;
}
}
End View
Controller class
package mvc;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Controller implements ActionListener
{
Model m;
View v;
public Controller()
{
m = new Model();
v = new View(this, m);
}
@Override
public void actionPerformed(ActionEvent arg0)
{
if (arg0.getSource() == "Click")
{
m.addClick();
v.getJLabel1().setText("Click count = " + getClickCount());
}
}
public int getClickCount()
{
return m.getClicks();
}
}
End Controller class
Model class
package mvc;
public class Model
{
private int clicks;
public Model()
{
clicks = 0;
}
public void addClick()
{
clicks++;
}
public int getClicks()
{
return clicks;
}
}
End Model class
Hi there, tôi r Emoved the Model từ phương thức main() và hàm tạo View giờ đây chỉ lấy một Controller làm tham số. – user1729409
Thông thường, Chế độ xem có mô hình. Các mô hình doesent mất bất cứ điều gì. Bộ điều khiển lấy cả mô hình và chế độ xem. Vì vậy, mô hình doesent biết về View và Controller. View chỉ biết và sử dụng Model, không phải là Controller. Bộ điều khiển có thể tham khảo cả hai Model và View –