2015-04-19 4 views
0

Я работаю над программой, которая вычисляет стоимость полов в зависимости от размеров комнаты и выбранного типа пола. У меня есть 5 классов (Cost, CustomerInfo, OrderSummary, MainForm и MainApp), а сама программа имеет 3 вкладки (стоимость, информация о клиенте, сводка заказов).Доступ к методам из нескольких классов

Каждая вкладка создается как соответствующий объект в классе MainForm. Проблема, которую я испытываю, - это класс OrderSummary, который должен вызвать методы getFloorArea() и getTotalCost() класса Cost, а также необходимо вызвать методы getCustName() и getCustAddress() из класса CustomerInfo. Каждая вкладка сама по себе работает правильно (вычисление площади, стоимость предлагаемого номера/получение имени и адреса клиента), но я не могу понять, как извлечь эту информацию в класс OrderSummary. Вкладка «Сводка заказов» показывает всю информацию как нуль.

Я уверен, что это потому, что мне нужно создать экземпляры классов Cost и CustomerInfo в классе OrderSummary, но я не могу понять, как это сделать. Я чувствую, что проблема заключается в создании трех разных объектов при создании моих вкладок, но я не знаю, как получить доступ к информации, которая вводится в каждую вкладку из класса OrderSummary. Любая помощь действительно оценена Я вытягиваю свои волосы, пытаясь понять, что делать.

Я могу предоставить код по мере необходимости, но это довольно длинная программа.

EDIT: Вот некоторые биты, которые я думаю, поможет:

Это в моем MainForm, где я создаю свои вкладки:

jtp.addTab("Cost", new Cost()); 
    jtp.addTab("Customer Info", new CustomerInfo()); 
    jtp.addTab("Order Summary", new OrderSummary()); 

Это метод getFloorArea() в классе Стоимость

public double getFloorArea() { 

     FloorLength = Double.parseDouble(enterLength.getText()); 
     FloorWidth = Double.parseDouble(enterWidth.getText()); 

     FloorArea = FloorLength * FloorWidth; 

     return FloorArea; 
    } 

И это мой класс OrderSummary, в котором я не могу понять, как назвать эти функции, чтобы отобразить информацию:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import helpers.*; 

@SuppressWarnings("serial") 
public class OrderSummary extends JPanel { 

    JTextArea orderSummary; 

    public OrderSummary() { 
     createPanel(); 
    } 

    private void createPanel() { 
     super.setLayout(new GridBagLayout()); 
     GridBagConstraints bag = new GridBagConstraints(); 

     bag.fill = GridBagConstraints.BOTH; 
     bag.anchor = GridBagConstraints.FIRST_LINE_START; 
     bag.insets = new Insets(5,5,5,5); 

     bag.gridx = 0; 
     bag.gridy = 0; 
     orderSummary = new JTextArea(5, 20); 
     orderSummary.setFont(new Font("Arial", Font.BOLD, 12)); 
     orderSummary.setBackground(Color.WHITE); 
     this.add(orderSummary, bag); 

//This is my trouble area, I can't figure out how to access the classes to display the information in this JTextArea   
orderSummary.setText("Customer Name: " + CustomerInfo.getFirstName() + " " + CustomerInfo.getLastName() + 
      "\nAddress: " + CustomerInfo.getStreet() + "\n" + CustomerInfo.getCity() + "\n" + CustomerInfo.getCustState() + "\n" + CustomerInfo.getZip() + 
      "\n\nTotal Area: " + Cost.getFloorArea() + " square feet" + 
      "\nCost: " + OutputHelpers.formattedCurrency(Cost.getTotalCost())); 
    } 

} 

Я попытался сделать переменные и методы статическими в классе затрат, но затем вычисления и стоимость не работают внутри самой вкладки. Например, моя ясная кнопка очистит все переменные, кроме статических.

+1

невозможно ответить точно без какого-либо кода. Просто разместите ** соответствующие ** части вашего кода, чтобы помочь нам помочь, хотя это, кажется, классическая проблема, которая может быть решена классическими шаблонами, такими как MVC. – Dici

+0

Не могли бы вы прояснить две вещи? 1) Когда вы говорите «3 вкладки», вы говорите о коде интерфейса пользователя (например, JFrame/JTabbedPane) правильно? 2) Можете ли вы пояснить, что делает класс «MainForm»? – jrbeverly

+0

1) Да, есть 3 JTabbedPanes. 2) Класс MainForm создает фрейм для всего графического интерфейса. – stevanc

ответ

2

Вы могли бы передать Cost и CustomerInformation объекты в OrderSummary при их создании в MainForm классе. Хотя вы можете подумать о том, чтобы перестроить свой проект.

public class MainForm { 

    public void myMethod() { 
     Cost cost = new Cost(); 
     CustomerInfo custInfo = new CustomerInfo(); 
     OrderSummary orderSummary = new OrderSummary(cost, custInfo); 

     jtp.addTab("Cost", cost); 
     jtp.addTab("Customer Info", custInfo); 
     jtp.addTab("Order Summary", orderSummary); 

     ... 
    } 
} 

И что-то вроде ...

public class OrderSummary { 

    private Cost cost; 
    private CustomerInformation custInfo; 

    public OrderSummary(Cost cost, CustomerInformation custInfo) { 
     this.cost = cost; 
     this.custInfo = custInfo; 
    } 

    ... 
} 
+1

Это немного обходное решение - проблема в том, что нет класса 'Order', из которого все будет дочерним. Каждое окно получает свои собственные данные. Чтобы сшить это вместе, у вас есть окна, которые знают об иерархии объектов, порядок которых выглядит как хороший родитель. Предложение Гэри OrderSummary будет работать так же хорошо. –

Смежные вопросы