Помогите новичку с общей концепцией
От: fireXXX Чехия https://invoicee032.myportfolio.com
Дата: 21.08.09 15:46
Оценка:
Приветствую, я совсем недавно начал изучать Java и у меня проблемы при написании программ "не по учебнику".
У меня постоянная проблема с видимостью компонентов и общей концепцией построения программы, хотя я читал в книге об этом(не всё понял).
Например, я хочу создать программу, состоящую из 1го JFrame и в нём 3ех JPanel.
Если все это делать в одном конструкторе одного класса — нет проблем.
Но я хочу вынести отрисовку каждой панели, если не в отдельный класс, то хотя бы в отдельный метод.

Например.. делаю в одном методе отрисовку 1 JFrame и в него вставляю 3 JPanel, создаю второй метод и в нем хочу заполнить одну JPanel — ФИГ! Он ее не видит. Пытаюсь и так и сяк.

Как вообще оптимальнее строить такие программы? Если все делать в конструкторе = у меня все захламляется, а т.к. ошибок в коде много, то отследить в куче ошибку со временем, мне как новичку, вообще малореально.

Помогите, пожалуйста!! Вот код для наглядности:

package auto04;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.BorderFactory;
import javax.swing.border.*;
import java.util.*;
import java.text.*;

public class Main extends JFrame {
    Main(){
        
        printJFrame();

    }

    // СОЗДАЮ ГЛАВНОЕ ОКНО ПРОГРАММЫ
    void printJFrame () {

        Container cp = getContentPane();

        JPanel leftUpperJPanel, leftBottomJPanel, rightJPanel, leftConnectJPanel;

        leftUpperJPanel = new JPanel();
        leftBottomJPanel = new JPanel();
        rightJPanel = new JPanel();
        leftConnectJPanel = new JPanel();

        leftUpperJPanel.setBorder(new LineBorder(Color.BLACK, 1));
        leftBottomJPanel.setBorder(new LineBorder(Color.BLACK, 1));
        rightJPanel.setBorder(new LineBorder(Color.BLACK, 1));
    //    leftConnectJPanel.setBorder(new LineBorder(Color.BLUE, 3));

        cp.setLayout(new BoxLayout(cp, BoxLayout.X_AXIS));

        leftConnectJPanel.setLayout(new BoxLayout(leftConnectJPanel, BoxLayout.Y_AXIS));
        leftConnectJPanel.add(leftUpperJPanel);
        leftConnectJPanel.add(leftBottomJPanel);

        cp.add(leftConnectJPanel);
        cp.add(rightJPanel);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(600, 300);
        setVisible(true);
    }
    // ДОБАВЛЯЮ КОМПОНЕНТЫ В ПРАВУЮ ПАНЕЛЬ
    void drawRightJPanel() {
      JLabel test = new JLabel("qqq;");
      rightJPanel.add(test);            // ВОТ ЭТУ ПАНЕЛЬ, ОБЪЯВЛЕННУЮ В МЕТОДЕ ВЫШЕ - НЕ ВИДИТ
    }

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

            }

        });


    }

}
Качественные Retina Ready дизайны. Внутренняя SEO оптимизация. Обращайтесь, портфолио: https://invoicee032.myportfolio.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.