2015-10-22 1 views
0

Привет всем, я сейчас пытаюсь закончить задание для школы, но я застрял, и здесь нет никакого контента, который может напрямую касаться моей проблемы. Назначение - создать GUI-приложение, которое отображает общее количество для посещения клиента Джо. Некоторые из вас могут знать эту проблему из школы. https://bb1ap.tamut.edu/bbcswebdav/pid-281014-dt-content-rid-800291_1/courses/80706_15/week08_activity_25-27.pdf В нижней части прилагаемого pdf-файла проблема, с которой я столкнулся, и изображение того, как должен выглядеть готовый продукт. Кажется, я не могу создать две отдельные границы. Любая помощь с этим очень ценится. Если вы можете объяснить это, как будто я пятый класс еще лучше!Как использовать две титульные границы для окружения отдельных компонентов?

//Programmer: Davis Bentley 
//Date: 10/21/2015 
//Purpose: To allow user to calculate auto service cost 

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

public class autoCalc extends JFrame { 

private JPanel topPanel; 
private JPanel centerPanel; 
private JLabel messageLabel1, messageLabel2; 
private JTextField autoTextField1, autoTextField2; 
private JButton calcButton, exitButton; 
private final int WINDOW_WIDTH = 450; 
private final int WINDOW_HEIGHT = 600; 
JCheckBox oil = new JCheckBox("Oil Change ($26.00)"); 
JCheckBox lube = new JCheckBox("Lube Job ($18.00)"); 
JCheckBox radiator = new JCheckBox("Radiator FLush($30.00"); 
JCheckBox trans = new JCheckBox("Transmission FLush ($80.00)"); 
JCheckBox inspect = new JCheckBox("Inspection ($15.00)"); 
JCheckBox muffler = new JCheckBox("Muffler Replacement ($100.00)"); 
JCheckBox tire = new JCheckBox("Tire Rotation ($20.00)"); 

public autoCalc(){ 
    super("Joe's Automotive"); 
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    buildPanel(); 
    setVisible(true); 
} 
private void buildPanel(){ 

    JFrame frame = new JFrame("Joe's Automotive"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(topPanel); 
    frame.add(centerPanel); 

    topPanel = new JPanel(); 
    topPanel.setBorder(BorderFactory.createTitledBorder("Routine Services")); 
    topPanel.add(oil); 
    topPanel.add(lube); 
    topPanel.add(radiator); 
    topPanel.add(trans); 
    topPanel.add(inspect); 
    topPanel.add(muffler); 
    topPanel.add(tire); 

    messageLabel1 = new JLabel("Parts charges:"); 
    autoTextField1 = new JTextField(10); 
    messageLabel2 = new JLabel("Hours of Labor:"); 
    autoTextField2 = new JTextField(10); 
    calcButton = new JButton("Calculate"); 
    calcButton.addActionListener(new CalcButtonListener()); 
    exitButton = new JButton("Exit"); 
    exitButton.addActionListener(new exitButtonListener()); 

    centerPanel = new JPanel(); 
    centerPanel.setBorder(BorderFactory.createTitledBorder("Nonroutine Services")); 
    centerPanel.add(messageLabel1); 
    centerPanel.add(autoTextField1); 
    centerPanel.add(messageLabel2); 
    centerPanel.add(autoTextField2); 
    centerPanel.add(calcButton); 
    centerPanel.add(exitButton); 
} 
private class CalcButtonListener implements ActionListener { 
    public void actionPerformed(ActionEvent e){ 
     String input, input2; 
     double parts, hours, labor; 
     double grandTotal = 0; 

     if (oil.isSelected()){ 
      grandTotal += 26; 
     } 
     if (lube.isSelected()){ 
      grandTotal += 18; 
     } 
     if (radiator.isSelected()){ 
      grandTotal += 30; 
     } 
     if (trans.isSelected()){ 
      grandTotal += 80; 
     } 
     if (inspect.isSelected()){ 
      grandTotal += 15; 
     } 
     if (muffler.isSelected()){ 
      grandTotal += 100; 
     } 
     if (tire.isSelected()){ 
      grandTotal += 20; 
     } 
     { 
      input = autoTextField1.getText(); 
      parts = Double.parseDouble(input); 
      input2 = autoTextField2.getText(); 
      hours = Double.parseDouble(input2); 
      labor = hours * 20; 
      grandTotal += parts + labor; 
     } 

     JOptionPane.showMessageDialog(null, "Total Charges: $" + grandTotal); 
    } 
} 
private class exitButtonListener implements ActionListener { 
    public void actionPerformed(ActionEvent e){ 
     dispose(); 
    } 
} 

} 

Heres код, чтобы запустить его:

//Programmer: Davis Bentley 
//Date: 10/21/2015 
//Purpose: To allow user to calculate auto service cost 

public class autoRun { 

public static void main(String[] args) { 
    autoCalc auto = new autoCalc(); 
} 

} 

ответ

0
frame.add(topPanel); 
frame.add(centerPanel); 
topPanel = new JPanel(); 

несколько проблем:

  1. Ваши topPanel и centerPanel переменные равны нулю при попытке добавить их в кадр, так что вы фактически ничего не добавляете к кадру. Создайте панели, добавьте компоненты на панель и затем добавьте панель в рамку.

  2. Менеджером по умолчанию для JFrame является BorderLayout. Когда вы добавляете компоненты в фрейм и не указываете ограничение, то оба компонента добавляются в CENTER. Однако в центре может отображаться только один компонент.

Try:

frame.add(topPanel, BorderLayout.PAGE_START); 
frame.add(centerPanel, BorderLayout.CENTER); 

и переместить эти заявления в нижней части метода buildPanel().

Для получения дополнительной информации и рабочих примеров ознакомьтесь с разделом из руководства Swing по телефону Using Layout Managers.

Содержите ссылку на учебник, удобный для изучения основ Swing.

+0

Эти командные строки работали, однако мне пришлось переместить их в конструктор и отбросить часть кадра. Единственная проблема, с которой я сейчас сталкиваюсь, - выстроить флажки с левой стороны? – Kar900

+0

'Эти командные строки работали,' - тогда ответ должен быть «принят», нажав на галочку, чтобы люди знали, что проблема решена. «Единственная проблема, с которой я сейчас сталкиваюсь, - это выстроить флажки с левой стороны?» - вот почему я дал вам ссылку на учебное пособие по менеджерам макетов. Для получения желаемого макета вам нужно использовать другой менеджер компоновки (или комбинацию менеджеров макетов). Может быть, BoxLayout? Прочтите учебник, поиграйте с демо и решите, что лучше для вас. – camickr

+0

Обнаружено, как использовать GridLayout. Теперь выложены флажки. Большое спасибо. – Kar900