2017-02-15 2 views
0

У меня есть приложение, которое по существу обновляет многие JFrames нажатием кнопки, когда вы нажимаете кнопку increment, тогда все значения всех атрибутов будут увеличиваться. Однако теперь мне нужно передать параметр из класса контроллера в конструктор основного класса, который даст каждому Jframe другое место, так как они в настоящее время сгруппированы сверху. Как мне это сделать?Как передать параметр в класс, чтобы, когда его параметр передан в конструкторе, движется JFrame?

Контроллер класса

public class Controller extends JFrame 
         implements ActionListener { 

    private Model model; 
    private View3 view3; 
    private View4 view4; 
    private JButton clearViews; // For direct message to views 
    private JButton incB; 
    private String title; 

    // Constructor 
    public Controller(Model model, String title) { 

     // Record reference to the model 
     this.model = model; 
     this.title = getTitle(); 

     // Configure the window 
     setTitle("Controller"); 
     setLocation(40,200); 
     setSize(350,150); 
     setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 
     Container window = getContentPane(); 
     window.setLayout(new FlowLayout());  // The default is that JFrame uses BorderLayout 



     // Set up input GUI 
     clearViews = new JButton("Clear views"); 
     window.add(clearViews); 
     clearViews.addActionListener(this); 

     incB = new JButton("Increment B"); 
     window.add(incB); 
     incB.addActionListener(this); 
     view3 = new View3(this, model); 
     window.add(view3); 
     view4 = new View4(this, model); 
     window.add(view4); 

     // Display the frame 
     setVisible(true); 

    } // constructor 

    // Button click handling: 
    public void actionPerformed(ActionEvent e) { 

     if (e.getSource() == clearViews) { 
      view3.clear(); 
      view4.clear(); 
     } 
     else if (e.getSource() == incB) 
      model.modifyB();  // The model will trigger the views to update themselves 

    } // actionPerformed 

} 

Главный метод

public class Main { 

    public static void main(String args[]) { 

     Model model = new Model(); 
     String title = new String(); 


     Controller1 c1 = new Controller(model, title); 
     Controller2 c2 = new Controller(model, title); 
     Controller2 c3 = new Controller(model, title); 

    } // main 

} // Main 
+0

См: [? Использование нескольких JFrames, хороший/плохой практике] (http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-or-bad- практика). Общий консенсус говорит, что это плохая практика. Но если вы настаиваете на его использовании, используйте ['JFrame # setLocation (...)'] (https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#setLocation (int,% 20int)) или ['JFrame # setLocationByPlatform (...)'] (https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#setLocationByPlatform (boolean)) также рассмотрите возможность использования карты [https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) ... – Frakcool

+1

Или с помощью [Диалоги] (https://docs.oracle. com/javase/tutorial/uiswing/components/dialog.html) – Frakcool

+0

Путь более сложный, чем должен быть – Toby

ответ

1

Там не так много, чтобы сделать это в общем виде, просто принять еще два параметра и использовать их для вашего местоположения.

public Controller(Model model, String title, int xPos, int yPos) { 

    // Record reference to the model 
    this.model = model; 
    this.title = getTitle(); 

    // Configure the window 
    setTitle("Controller"); 
    setLocation(xPos, yPos); 

    // Rest of the constructor... 
+0

Не могу поверить, что все было так просто, спасибо :) – Toby

Смежные вопросы