有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVA Swing组件不会出现

由于某种原因,当我运行程序时,一些Swing组件没有出现,我不知道为什么。只显示乘法标签、乘法按钮、总计标签和停止按钮。其余的都不行

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

public class BabyCalculatorFinal extends JFrame{

private JLabel AdditionLabel;
private JTextField AdditionField;
private JButton AdditionButton;
private JPanel Multiplication;
private JLabel MultiplicationLabel;
private JTextField MultiplicationField;
private JButton MultiplicationButton;
private JPanel Total;
private JLabel TotalLabel;
private JTextField TotalField;
JButton StopButton;

public BabyCalculatorFinal(){
    setDefaultCloseOperation(EXIT_ON_CLOSE);// 1st thing to do
    setName("Baby Calculator Final"); // 2nd thing to do
    setLayout(new GridLayout(3,0)); //sets grid layout for the entire thing with 3 rows
    // Create Action Event
    BabyCalculatorListener Listener = new BabyCalculatorListener();
    //Addition 
    //Addition Set Layout
    JPanel Addition = new JPanel(new BorderLayout());
    //Addition Features
    AdditionLabel = new JLabel("Amount to add"); //Create label
    AdditionField = new JTextField(10);
    AdditionButton = new JButton("Add");
    //Organize Addition Panel
    Addition.add(AdditionLabel, BorderLayout.WEST);//IMPORTANT FORMAT
    Addition.add(AdditionLabel, BorderLayout.CENTER);
    Addition.add(AdditionButton, BorderLayout.EAST);
    //Add addition Panel to Frame
    add(Addition);
    AdditionButton.addActionListener(Listener);

    //Multiplictation
    //Multiplication Set Layout
    Multiplication = new JPanel();
    Multiplication.setLayout(new BorderLayout());//Trying a different way of setting the layout
    //Multiplication Features
    MultiplicationLabel = new JLabel("Amount to Multiply"); //Create label
    MultiplicationField = new JTextField(10);
    MultiplicationButton = new JButton("Multiply");
    //Organize Multiplication Panel
    Addition.add(MultiplicationLabel, BorderLayout.WEST);
    Addition.add(MultiplicationLabel, BorderLayout.CENTER);
    Addition.add(MultiplicationButton, BorderLayout.EAST);
    //Add Multiplication Panel to Frame
    add(Multiplication);
    MultiplicationButton.addActionListener(Listener);
    //Total
    Total = new JPanel(new FlowLayout(10));
    TotalLabel = new JLabel("Total");
    TotalField = new JTextField();
    TotalField.setText("0.0");
    TotalField.setVisible(false);
    StopButton = new JButton("Stop");
    Total.add(TotalLabel);
    Total.add(TotalField);
    Total.add(StopButton);
    //Add Total Panel to Frame
    add(Total);
    pack();
    setVisible(true);
}

public static void main(String[] args){
    JFrame myFrame = new BabyCalculatorFinal();
}

public class BabyCalculatorListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        String totalText = TotalField.getText();
        double total = Double.parseDouble(totalText);
        if (e.getSource() == AdditionButton){
        String additionText = AdditionField.getText();
        double addition = Double.parseDouble(additionText);
        total += addition;
       }
       else{
           String multiplicationText = MultiplicationField.getText();
           double multiplication = Double.parseDouble(multiplicationText);
           total += multiplication;
        }
        TotalField.setText(total + "");
    }
}

}


共 (1) 个答案

  1. # 1 楼答案

    你的代码全是打字错误(?),例如,您将AdditionLabel两次添加到JPanel中,而不是添加AdditionLabelAdditionField。创建Multiplication面板后,您不会使用它,而是覆盖Addition面板的内容。添加组件的正确代码段应该是(我更改了变量名以符合Java约定):

    additionLabel = new JLabel("Amount to add"); // Create label
    additionField = new JTextField(10);
    additionButton = new JButton("Add");
    // Organize addition Panel
    addition.add(additionLabel, BorderLayout.WEST);// IMPORTANT FORMAT
    addition.add(additionField, BorderLayout.CENTER); // instead of additionLabel
    addition.add(AdditionButton, BorderLayout.EAST);
    // Add addition Panel to Frame
    add(addition);
    AdditionButton.addActionListener(Listener);
    
    // Multiplictation
    // Multiplication Set Layout
    multiplication = new JPanel();
    multiplication.setLayout(new BorderLayout());// Trying a different way
                                                    // of setting the layout
    // Multiplication Features
    multiplicationLabel = new JLabel("Amount to Multiply"); // Create label
    multiplicationField = new JTextField(10);
    multiplicationButton = new JButton("Multiply");
    // Organize Multiplication Panel
    multiplication.add(multiplicationLabel, BorderLayout.WEST);   // instead of Addition
    multiplication.add(multiplicationField, BorderLayout.CENTER);
    multiplication.add(multiplicationButton, BorderLayout.EAST);