Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2017, 14:18   #1
damirshaniyazov
Новичок
Джуниор
 
Регистрация: 09.04.2017
Сообщений: 2
По умолчанию Использование графических элементов

Решил сделать форму при массива графических элементов. Нужно было обращаться к ним. Сделал такой метод в родителе
Код:
	public void exittheMode(JButton exit, JFrame MF) {
		exit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
				MF.setVisible(true);
				MF.setSize(400, 310);
			}
		});	
	}
Полный код родителя
Код:
package classPackage;

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

import javax.swing.*;
import mainPackage.*;

public class classAdminFrame extends JFrame {
	
	protected ModeFrame MF = new ModeFrame();

	protected JButton[] button = new JButton [2];
	protected String[] textBtn = {"Расcчитать и отправить стоимость тура", "Выйти из режима"};
	protected Integer[] btncoordxy = {0, 270, 200, 200};
	protected Integer[] btnscale = {255, 140, 30, 30};
	protected Integer[] btnsizefont = {13, 13};
	
	JLabel[] label = new JLabel[7];
	protected String[] textlbl = {"Расчёт стоимости тура", "Заявка есть? -", "", "Стоимость проживания одного туриста за одну ночь -", "Стоимость перевозки туда и обратно -", "Стоимость питания -", "Маржинальный доход (в процентах) -"};
	protected Integer[] lblcoordxy = {110, 0, 120, 0, 0, 0, 0, 0, 30, 30, 60, 90, 120, 150};
	protected Integer[] lblscale = {285, 120, 20, 340, 240, 130, 235, 30, 30, 30, 30, 30, 30, 30};
	protected Integer[] lblsizefont = {20, 14, 16, 14, 14, 14, 14};
	
	JTextField[] textField = new JTextField[4];
	protected Integer[] textFieldcoordxy = {340, 250, 135, 240, 60, 90, 120, 150};
	protected int widthtextField = 50;
	protected int heighttextField = 30;
	protected int textFieldsizefont = 14;
	
	public void setJButton(String textBtn[], Integer btncoordxy[], Integer btnscale[], Integer btnsizefont[], JPanel panel) {
		for (int i = 0; i < 2; i++) {
			button[i] = new JButton();
			button[i].setText(textBtn[i]);
			button[i].setBounds(btncoordxy[i], btncoordxy[i + 2], btnscale[i], btnscale[i + 2]);
			button[i].setFont(new Font("Segoe UI Light", Font.PLAIN, btnsizefont[i]));
			panel.add(button[i]);
		}
	}
	
	protected void setJLabel(String textlbl[], Integer lblcoordxy[], Integer lblscale[], Integer lblsizefont[], JPanel panel) {
		for (int i = 0; i < 7; i++) {
			label[i] = new JLabel();
			label[i].setText(textlbl[i]);
			label[i].setBounds(lblcoordxy[i], lblcoordxy[i + 7], lblscale[i], lblscale[i + 7]);
			label[i].setFont(new Font("Segoe UI Light", Font.PLAIN, lblsizefont[i]));
			panel.add(label[i]);
		}
	}
	
	protected void setJTextField(Integer textFieldcoordxy[], int widthtextField, int heighttextField, int textFieldsizefont, JPanel panel) {
		for (int i = 0; i < 4; i++) {
			textField[i] = new JTextField();
			textField[i].setBounds(textFieldcoordxy[i], textFieldcoordxy[i + 4], widthtextField, heighttextField);
			textField[i].setFont(new Font("Segoe UI Light", Font.PLAIN, textFieldsizefont));
			panel.add(textField[i]);
		}
	}
	
	public JPanel setPanel (JPanel panel, int x, int y, int width, int height) {
		panel.setBounds(x, y, width, height);
		panel.setLayout(null);
		return panel;
	}
	
	public void exittheMode(JButton exit, JFrame MF) {
		exit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
				MF.setVisible(true);
				MF.setSize(400, 310);
			}
		});	
	}
}
Полный код потомка
Код:
package mainPackage;

import java.awt.*;
import javax.swing.*;

import classPackage.classAdminFrame;

public class AdminFrame extends classAdminFrame {

	private JPanel panel = new JPanel();
	
	
	public AdminFrame() {
		getContentPane().setLayout(null);
		setPanel(panel, 10, 11, 415, 320);
		getContentPane().add(panel);

		setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
		setJLabel(textlbl, lblcoordxy, lblscale, lblsizefont, panel);
		setJTextField(textFieldcoordxy, widthtextField, heighttextField, textFieldsizefont, panel);
		exittheMode(button[1], MF);
	}
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					AdminFrame frame = new AdminFrame();
					frame.setVisible(true);
					frame.setSize(450, 310);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
}
damirshaniyazov вне форума Ответить с цитированием
Старый 09.04.2017, 14:18   #2
damirshaniyazov
Новичок
Джуниор
 
Регистрация: 09.04.2017
Сообщений: 2
По умолчанию

Решил сделать тоже самое и для других
Родитель
Код:
package classPackage;

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

import javax.swing.*;
import mainPackage.*;

public class classModeFrame extends JFrame {
	
	protected AdminFrame AF = new AdminFrame();

	
	protected JButton[] button = new JButton[2];
	protected String[] textBtn = {"Турагент", "Турист"};
	protected Integer[] btncoordxy = {80, 80, 60, 120};
	protected Integer[] btnscale = {200, 200, 30, 30};
	protected int btnsizefont = 14;

	public JPanel setPanel (JPanel panel, int x, int y, int width, int height) {
		panel.setBounds(x, y, width, height);
		panel.setLayout(null);
		return panel;
	}
	
	public JLabel setLabel(String namelabel, String labeltext, int x, int y, int width, int height, int size, JPanel panel) {
		JLabel label = new JLabel();
		label.setName(namelabel);
		label.setText(labeltext);
		label.setBounds(x, y, width, height);
		label.setFont(new Font("Segoe UI Light", Font.PLAIN, size));
		panel.add(label);
		return label;
	}
	
	protected void setJButton(String textBtn[], Integer btncoordxy[], Integer btnscale[], int btnsizefont, JPanel panel) {
		for (int i = 0; i < 2; i++) {
			button[i] = new JButton();
			button[i].setText(textBtn[i]);
			button[i].setBounds(btncoordxy[i], btncoordxy[i + 2], btnscale[i], btnscale[i + 2]);
			button[i].setFont(new Font("Segoe UI Light", Font.PLAIN, btnsizefont));
			panel.add(button[i]);
		}
	}
	
	public void gotoAdminFrame(JButton btnTourAgent, JFrame AF) {
		btnTourAgent.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
				AF.setVisible(true);
				AF.setSize(400, 310);
			}
		});	
	}
}
Потомок
Код:
package mainPackage;

import classPackage.classModeFrame;

import java.awt.*;
import javax.swing.*;

public class ModeFrame extends classModeFrame {
	
	private JPanel panel = new JPanel();

	
	public ModeFrame() {
		
		getContentPane().setLayout(null);
		setPanel(panel, 10, 11, 415, 240);
		getContentPane().add(panel);
		
		setLabel("chooseMode", "Select mode", 145, 0, 80, 30, 14, panel);
		setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
		gotoAdminFrame(button[0], AF); 
	}

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ModeFrame frame = new ModeFrame();
					frame.setVisible(true);
					frame.setSize(400, 310);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
}
После добавления данного метода во второго родителя, начали появляться ошибки
Код:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
	at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
	at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
	at java.awt.Window.init(Unknown Source)
	at java.awt.Window.<init>(Unknown Source)
	at java.awt.Frame.<init>(Unknown Source)
	at java.awt.Frame.<init>(Unknown Source)
	at javax.swing.JFrame.<init>(Unknown Source)
	at classPackage.classAdminFrame.<init>(classAdminFrame.java:10)
	at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
	at classPackage.classModeFrame.<init>(classModeFrame.java:12)
	at mainPackage.ModeFrame.<init>(ModeFrame.java:13)
	at classPackage.classAdminFrame.<init>(classAdminFrame.java:12)
	at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
	at classPackage.classModeFrame.<init>(classModeFrame.java:12)
	at mainPackage.ModeFrame.<init>(ModeFrame.java:13)
	at classPackage.classAdminFrame.<init>(classAdminFrame.java:12)
	at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
........
Почему так? Ведь когда добавил один метод, то все хорошо. А после второго ошибки
Я предполагаю что у меня рекурсия (как это исправить я не знаю)

Последний раз редактировалось damirshaniyazov; 09.04.2017 в 14:46.
damirshaniyazov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование графических элементов Кодер2 Помощь студентам 3 20.02.2017 12:57
множество графических элементов Casillas1 Помощь студентам 10 04.06.2013 12:25
ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ,Использование графических возможностей Delphi ice_fenix Помощь студентам 0 02.05.2013 21:26
Использование в Windows графических средств C++ vladislavchick Общие вопросы C/C++ 4 24.02.2010 13:37