All the programming books that I read perfectly reveal the technical details of writing code. For example, that if there are abstract methods in the parent class, then in the derived class they must be redefined or this class itself must be abstract. Or the theory is given, I read several books where the principles of the PLO were perfectly explained. This is all very good and important. But neither books nor in the university teach how to write programs (my opinion). I will give an example: I am writing a GUI. I have a method in which I set properties for a JInternalFrame, customize its appearance. And then I call this method for each JInternalFrame. Here he is:
private static void createIFrameProperties(JInternalFrame iframe) { // TODO Auto-generated method stub BasicInternalFrameUI ui = new BasicInternalFrameUI(iframe); iframe.setUI(ui); ((BasicInternalFrameUI) iframe.getUI()).getNorthPane() .setPreferredSize(new Dimension(400, 28)); ((BasicInternalFrameUI) iframe.getUI()).getNorthPane().setBorder( new LineBorder(Color.GRAY, 1)); ((BasicInternalFrameUI) iframe.getUI()).getNorthPane().remove(0); ((BasicInternalFrameUI) iframe.getUI()).getNorthPane().remove(0); ((BasicInternalFrameUI) iframe.getUI()).getNorthPane().remove(0); ((BasicInternalFrameUI) iframe.getUI()).getNorthPane().revalidate(); ((BasicInternalFrameUI) iframe.getUI()).getNorthPane().repaint(); JComponent title = ((BasicInternalFrameUI) iframe.getUI()) .getNorthPane(); for (int i = 0; i < title.getComponentCount(); i++) { JComponent component = (JComponent) title.getComponent(i); if (component instanceof JButton) { JButton button = ((JButton) component); button.setToolTipText("Закрыть"); button.setMinimumSize(new Dimension(24, 24)); button.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub button.setIcon(new ImageIcon("images/closered.png")); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub button.setIcon(new ImageIcon("images/closeEnd.png")); } }); button.setIcon(new ImageIcon("images/closeEnd.png")); button.setSelectedIcon(new ImageIcon("images/closeEnd.png")); button.setPressedIcon(new ImageIcon("images/closeEnd.png")); } } iframe.addInternalFrameListener(new InternalFrameAdapter() { @Override public void internalFrameClosed(InternalFrameEvent e) { frameForRead = null; frameForHelp = null; } @Override public void internalFrameClosing(InternalFrameEvent e) { frameForRead = null; frameForHelp = null; } }); } Or, you can create a class, inherit it from JInternalFrame, and register it all in its constructor. Like this:
public class MyJInternalFrame extends JInternalFrame { private boolean isOpened; public MyJInternalFrame(String s) { super(s, true, true, false, false); BasicInternalFrameUI ui = new BasicInternalFrameUI(this); setUI(ui); ((BasicInternalFrameUI) getUI()).getNorthPane() .setPreferredSize(new Dimension(400, 28)); ((BasicInternalFrameUI) getUI()).getNorthPane().setBorder( new LineBorder(Color.GRAY, 1)); ((BasicInternalFrameUI) getUI()).getNorthPane().remove(0); ((BasicInternalFrameUI) getUI()).getNorthPane().remove(0); ((BasicInternalFrameUI) getUI()).getNorthPane().remove(0); ((BasicInternalFrameUI) getUI()).getNorthPane().revalidate(); ((BasicInternalFrameUI) getUI()).getNorthPane().repaint(); createNorthPanel(); setVisible(true); setMinimumSize(new Dimension(400, 500)); } private void createNorthPanel() { // TODO Auto-generated method stub JComponent title = ((BasicInternalFrameUI) this.getUI()) .getNorthPane(); for (int i = 0; i < title.getComponentCount(); i++) { JComponent component = (JComponent) title.getComponent(i); if (component instanceof JButton) { JButton button = ((JButton) component); button.setToolTipText("Закрыть"); button.setMinimumSize(new Dimension(24, 24)); button.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub button.setIcon(new ImageIcon("images/closered.png")); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub button.setIcon(new ImageIcon("images/closeEnd.png")); } }); button.setIcon(new ImageIcon("images/closeEnd.png")); button.setSelectedIcon(new ImageIcon("images/closeEnd.png")); button.setPressedIcon(new ImageIcon("images/closeEnd.png")); } } } Then in the program you can simply create objects of this class and they will already be properly configured. The same goes for buttons and all other controls. It is possible to register everything in one class in which the GUI is created. This class will work out for me about 3000 lines. Or you can spread it into several classes (as in the example), then the main class will be much less. That is, the question is: what is better, one class for 3,000 lines or 20 for 200 lines each (numbers are taken approximately)? PS I know about patterns, but in my opinion this is a question from another area. Rather, I wonder how to write code more professionally or something.