Приветствую, я совсем недавно начал изучать 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();
}
});
}
}