Графический интерфейс - Java (240901)

Узнай цену своей работы

Формулировка задачи:

Решил сделать форму при массива графических элементов. Нужно было обращаться к ним. Сделал такой метод в родителе
Листинг программы
  1. public void exittheMode(JButton exit, JFrame MF) {
  2. exit.addActionListener(new ActionListener() {
  3. public void actionPerformed(ActionEvent e) {
  4. dispose();
  5. MF.setVisible(true);
  6. MF.setSize(400, 310);
  7. }
  8. });
  9. }
Полный код родителя
Листинг программы
  1. package classPackage;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.*;
  6. import mainPackage.*;
  7. public class classAdminFrame extends JFrame {
  8. protected ModeFrame MF = new ModeFrame();
  9. protected JButton[] button = new JButton [2];
  10. protected String[] textBtn = {"Расcчитать и отправить стоимость тура", "Выйти из режима"};
  11. protected Integer[] btncoordxy = {0, 270, 200, 200};
  12. protected Integer[] btnscale = {255, 140, 30, 30};
  13. protected Integer[] btnsizefont = {13, 13};
  14. JLabel[] label = new JLabel[7];
  15. protected String[] textlbl = {"Расчёт стоимости тура", "Заявка есть? -", "", "Стоимость проживания одного туриста за одну ночь -", "Стоимость перевозки туда и обратно -", "Стоимость питания -", "Маржинальный доход (в процентах) -"};
  16. protected Integer[] lblcoordxy = {110, 0, 120, 0, 0, 0, 0, 0, 30, 30, 60, 90, 120, 150};
  17. protected Integer[] lblscale = {285, 120, 20, 340, 240, 130, 235, 30, 30, 30, 30, 30, 30, 30};
  18. protected Integer[] lblsizefont = {20, 14, 16, 14, 14, 14, 14};
  19. JTextField[] textField = new JTextField[4];
  20. protected Integer[] textFieldcoordxy = {340, 250, 135, 240, 60, 90, 120, 150};
  21. protected int widthtextField = 50;
  22. protected int heighttextField = 30;
  23. protected int textFieldsizefont = 14;
  24. public void setJButton(String textBtn[], Integer btncoordxy[], Integer btnscale[], Integer btnsizefont[], JPanel panel) {
  25. for (int i = 0; i < 2; i++) {
  26. button[i] = new JButton();
  27. button[i].setText(textBtn[i]);
  28. button[i].setBounds(btncoordxy[i], btncoordxy[i + 2], btnscale[i], btnscale[i + 2]);
  29. button[i].setFont(new Font("Segoe UI Light", Font.PLAIN, btnsizefont[i]));
  30. panel.add(button[i]);
  31. }
  32. }
  33. protected void setJLabel(String textlbl[], Integer lblcoordxy[], Integer lblscale[], Integer lblsizefont[], JPanel panel) {
  34. for (int i = 0; i < 7; i++) {
  35. label[i] = new JLabel();
  36. label[i].setText(textlbl[i]);
  37. label[i].setBounds(lblcoordxy[i], lblcoordxy[i + 7], lblscale[i], lblscale[i + 7]);
  38. label[i].setFont(new Font("Segoe UI Light", Font.PLAIN, lblsizefont[i]));
  39. panel.add(label[i]);
  40. }
  41. }
  42. protected void setJTextField(Integer textFieldcoordxy[], int widthtextField, int heighttextField, int textFieldsizefont, JPanel panel) {
  43. for (int i = 0; i < 4; i++) {
  44. textField[i] = new JTextField();
  45. textField[i].setBounds(textFieldcoordxy[i], textFieldcoordxy[i + 4], widthtextField, heighttextField);
  46. textField[i].setFont(new Font("Segoe UI Light", Font.PLAIN, textFieldsizefont));
  47. panel.add(textField[i]);
  48. }
  49. }
  50. public JPanel setPanel (JPanel panel, int x, int y, int width, int height) {
  51. panel.setBounds(x, y, width, height);
  52. panel.setLayout(null);
  53. return panel;
  54. }
  55. public void exittheMode(JButton exit, JFrame MF) {
  56. exit.addActionListener(new ActionListener() {
  57. public void actionPerformed(ActionEvent e) {
  58. dispose();
  59. MF.setVisible(true);
  60. MF.setSize(400, 310);
  61. }
  62. });
  63. }
  64. }
Полный код потомка
Листинг программы
  1. package mainPackage;
  2. import java.awt.*;
  3. import javax.swing.*;
  4. import classPackage.classAdminFrame;
  5. public class AdminFrame extends classAdminFrame {
  6. private JPanel panel = new JPanel();
  7.  
  8. public AdminFrame() {
  9. getContentPane().setLayout(null);
  10. setPanel(panel, 10, 11, 415, 320);
  11. getContentPane().add(panel);
  12. setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
  13. setJLabel(textlbl, lblcoordxy, lblscale, lblsizefont, panel);
  14. setJTextField(textFieldcoordxy, widthtextField, heighttextField, textFieldsizefont, panel);
  15. exittheMode(button[1], MF);
  16. }
  17. public static void main(String[] args) {
  18. EventQueue.invokeLater(new Runnable() {
  19. public void run() {
  20. try {
  21. AdminFrame frame = new AdminFrame();
  22. frame.setVisible(true);
  23. frame.setSize(450, 310);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. });
  29. }
  30. }
Решил сделать тоже самое и для других Родитель
Листинг программы
  1. package classPackage;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.*;
  6. import mainPackage.*;
  7. public class classModeFrame extends JFrame {
  8. protected AdminFrame AF = new AdminFrame();
  9.  
  10. protected JButton[] button = new JButton[2];
  11. protected String[] textBtn = {"Турагент", "Турист"};
  12. protected Integer[] btncoordxy = {80, 80, 60, 120};
  13. protected Integer[] btnscale = {200, 200, 30, 30};
  14. protected int btnsizefont = 14;
  15. public JPanel setPanel (JPanel panel, int x, int y, int width, int height) {
  16. panel.setBounds(x, y, width, height);
  17. panel.setLayout(null);
  18. return panel;
  19. }
  20. public JLabel setLabel(String namelabel, String labeltext, int x, int y, int width, int height, int size, JPanel panel) {
  21. JLabel label = new JLabel();
  22. label.setName(namelabel);
  23. label.setText(labeltext);
  24. label.setBounds(x, y, width, height);
  25. label.setFont(new Font("Segoe UI Light", Font.PLAIN, size));
  26. panel.add(label);
  27. return label;
  28. }
  29. protected void setJButton(String textBtn[], Integer btncoordxy[], Integer btnscale[], int btnsizefont, JPanel panel) {
  30. for (int i = 0; i < 2; i++) {
  31. button[i] = new JButton();
  32. button[i].setText(textBtn[i]);
  33. button[i].setBounds(btncoordxy[i], btncoordxy[i + 2], btnscale[i], btnscale[i + 2]);
  34. button[i].setFont(new Font("Segoe UI Light", Font.PLAIN, btnsizefont));
  35. panel.add(button[i]);
  36. }
  37. }
  38. public void gotoAdminFrame(JButton btnTourAgent, JFrame AF) {
  39. btnTourAgent.addActionListener(new ActionListener() {
  40. public void actionPerformed(ActionEvent e) {
  41. dispose();
  42. AF.setVisible(true);
  43. AF.setSize(400, 310);
  44. }
  45. });
  46. }
  47. }
Потомок
Листинг программы
  1. package mainPackage;
  2. import classPackage.classModeFrame;
  3. import java.awt.*;
  4. import javax.swing.*;
  5. public class ModeFrame extends classModeFrame {
  6. private JPanel panel = new JPanel();
  7.  
  8. public ModeFrame() {
  9. getContentPane().setLayout(null);
  10. setPanel(panel, 10, 11, 415, 240);
  11. getContentPane().add(panel);
  12. setLabel("chooseMode", "Select mode", 145, 0, 80, 30, 14, panel);
  13. setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
  14. gotoAdminFrame(button[0], AF);
  15. }
  16. public static void main(String[] args) {
  17. EventQueue.invokeLater(new Runnable() {
  18. public void run() {
  19. try {
  20. ModeFrame frame = new ModeFrame();
  21. frame.setVisible(true);
  22. frame.setSize(400, 310);
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. });
  28. }
  29. }
После добавления данного метода во второго родителя, начали появляться ошибки
Листинг программы
  1. Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
  2. at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
  3. at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
  4. at java.awt.Window.init(Unknown Source)
  5. at java.awt.Window.<init>(Unknown Source)
  6. at java.awt.Frame.<init>(Unknown Source)
  7. at java.awt.Frame.<init>(Unknown Source)
  8. at javax.swing.JFrame.<init>(Unknown Source)
  9. at classPackage.classAdminFrame.<init>(classAdminFrame.java:10)
  10. at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
  11. at classPackage.classModeFrame.<init>(classModeFrame.java:12)
  12. at mainPackage.ModeFrame.<init>(ModeFrame.java:13)
  13. at classPackage.classAdminFrame.<init>(classAdminFrame.java:12)
  14. at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
  15. at classPackage.classModeFrame.<init>(classModeFrame.java:12)
  16. at mainPackage.ModeFrame.<init>(ModeFrame.java:13)
  17. at classPackage.classAdminFrame.<init>(classAdminFrame.java:12)
  18. at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
  19. ........
Почему так? Ведь когда добавил один метод, то все хорошо. А после второго ошибки Я предполагаю что у меня рекурсия (как это исправить я не знаю)
Как и предполагал у меня была рекурсия Решение: В родителе
Листинг программы
  1. public void gotoAdminFrame(JButton btnTourAgent, [B]AdminFrame admin[/B]) {
  2. btnTourAgent.addActionListener(new ActionListener() {
  3. public void actionPerformed(ActionEvent e) {
  4. [B]AF = admin;[/B]
  5. dispose();
  6. AF.setVisible(true);
  7. AF.setSize(400, 310);
  8. }
  9. });
  10. }
Запустилась но теперь при нажатии на кнопку в ModeFrame выходит следующая ошибка
Листинг программы
  1. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
  2. at classPackage.classAdminFrame$1.actionPerformed(classAdminFrame.java:76)
  3. at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
  4. at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
  5. at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
  6. at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
  7. at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
  8. at java.awt.Component.processMouseEvent(Unknown Source)
  9. at javax.swing.JComponent.processMouseEvent(Unknown Source)
  10. at java.awt.Component.processEvent(Unknown Source)
  11. at java.awt.Container.processEvent(Unknown Source)
  12. at java.awt.Component.dispatchEventImpl(Unknown Source)
  13. at java.awt.Container.dispatchEventImpl(Unknown Source)
  14. at java.awt.Component.dispatchEvent(Unknown Source)
  15. at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
  16. at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
  17. at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
  18. at java.awt.Container.dispatchEventImpl(Unknown Source)
  19. at java.awt.Window.dispatchEventImpl(Unknown Source)
  20. at java.awt.Component.dispatchEvent(Unknown Source)
  21. at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
  22. at java.awt.EventQueue.access$500(Unknown Source)
  23. at java.awt.EventQueue$3.run(Unknown Source)
  24. at java.awt.EventQueue$3.run(Unknown Source)
  25. at java.security.AccessController.doPrivileged(Native Method)
  26. at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
  27. at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
  28. at java.awt.EventQueue$4.run(Unknown Source)
  29. at java.awt.EventQueue$4.run(Unknown Source)
  30. at java.security.AccessController.doPrivileged(Native Method)
  31. at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
  32. at java.awt.EventQueue.dispatchEvent(Unknown Source)
  33. at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
  34. at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
  35. at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  36. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  37. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  38. at java.awt.EventDispatchThread.run(Unknown Source)

Решение задачи: «Графический интерфейс»

textual
Листинг программы
  1.     public void exittheMode (JButton button, ModeFrame frame){
  2.         button.addActionListener(new ActionListener() {
  3.             public void actionPerformed(ActionEvent e) {
  4.                 dispose();
  5.                 frame.setVisible(true);
  6.                 frame.setSize(445, 310);
  7.                 }
  8.             });
  9.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы