2015-11-21 5 views
1

Я пишу программу, и класс GUi (основной класс) перегружен.Разделить графический интерфейс в нескольких классах

Я хочу знать, можно ли разбить класс на несколько классов. , например, я создал класс константников.

Главный вопрос заключается в том, могу ли я сохранить код интерфейса в одном классе (где я буду добавлять и инициализировать JTetxFields, JButtons и другие Jobject), а затем использовать их в другом классе.

, например: в классе интерфейса будет:

JTextField field = new JTextField(12); 
JButton button = new JButton("Click"); 

и в основном классе я smthng так:

add(field); 
    add(button); 
    button.addActionListener(this); 

public void actionPerformed(ActionEvent e) { 
    if(e.getSource==button){ 
     field.setVisible(false); 
} 

, если это возможно с созданием нового JFrame, то пожалуйста скажите мне как создать новый фрейм и использовать его в основном классе.

+0

Вы можете и должны разделить большие классы в более мелкие классы, но детали о том, как вы это сделаете, будут зависеть от деталей вашего текущего кода, о чем мы мало знаем. Лучше всего было бы сначала попытаться разделить по линиям M-V-C или модели-view-controller. –

ответ

4

Ваш главный вопрос: можете ли вы создать класс, являющийся хранилищем ваших компонентов графического интерфейса пользователя, и использовать их в другом месте, и ответ да, вы: может, но я не думаю, что вы должны, по крайней мере, не для простых компонентов. Вы должны хранить JTextFields, JButtons в классах GUI, которые их используют, но любой важный подраздел вашего графического интерфейса, такой как JPanel, который содержит компоненты и обладает уникальной функциональностью, которые могут работать в своем классе.

Важнейшим является разделение различных функциональных частей вашей программы, особенно вы должны попытаться выделить логическую или «модельную» часть своей программы из части графического интерфейса или «просмотра». Информация о том, как вы это сделаете, будет зависеть от деталей вашей программы и общей проблемы.

Например:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class SeparateClasses { 
    private static void createAndShowGui() { 
     SeparateClassView mainPanel = new SeparateClassView(); 
     new SeparateClassControl(mainPanel); 

     JFrame frame = new JFrame("GUI"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGui(); 
      } 
     }); 
    } 
} 

public class SeparateClassView extends JPanel { 
    private JTextField field1 = new JTextField(12); 
    private JTextField field2 = new JTextField(12); 
    private JTextField resultField = new JTextField("false", 5); 
    private JButton button = new JButton("Click"); 

    public SeparateClassView() { 
     resultField.setEditable(false); 
     resultField.setFocusable(false); 

     add(new JLabel("Field 1:")); 
     add(field1); 
     add(new JLabel("Field 2:")); 
     add(field2); 

     add(button); 

     add(new JLabel("Two texts equivalent?:")); 
     add(resultField); 

    } 

    public void addButtonListener(ActionListener listener) { 
     button.addActionListener(listener); 
     field1.addActionListener(listener); 
     field2.addActionListener(listener); 
    } 

    public String getField1Text() { 
     return field1.getText(); 
    } 

    public String getField2Text() { 
     return field2.getText(); 
    } 

    public void setField1Text(String text) { 
     field1.setText(text); 
    } 

    public void setField2Text(String text) { 
     field2.setText(text); 
    } 

    public void setResult(boolean result) { 
     resultField.setText(String.valueOf(result)); 
    } 
} 

public class SeparateClassControl implements ActionListener { 
    private SeparateClassView view; 

    public SeparateClassControl(SeparateClassView view) { 
     this.view = view; 
     view.addButtonListener(this); 
    } 



    @Override 
    public void actionPerformed(ActionEvent e) { 
     String text1 = view.getField1Text(); 
     String text2 = view.getField2Text(); 
     boolean result = SeparateClassModel.stringsEquivalent(text1, text2); 
     view.setResult(result); 
    } 
} 

public class SeparateClassModel { 
    public static boolean stringsEquivalent(String text1, String text2) { 
     return text1.equalsIgnoreCase(text2); 
    } 
} 
Смежные вопросы