0

我正在尝试使用 Netbeans IDE 7.1 构建一个 java 项目。

我不知何故看不到或查看我创建的 GUI 窗口。

请多多指教。

在我的课堂上:

package rmiSimpleCalc;

public class RMISimpleCalculatorMain {

    public static void main(String[] args) {
        MainCalculator calc = new MainCalculator();
        calc.setVisible(true);
    }
}

MainCalculator是我想运行的 GUI 窗口。它以某种方式不会显示。

我的控制台中没有错误消息。

这是MainCalculator代码:

package rmiSimpleCalc;

import java.rmi.*;

public class MainCalculator extends javax.swing.JPanel {

    public MainCalculator() {
        initComponents();
        ComboBoxOperator.addItem("+");
        ComboBoxOperator.addItem("-");
        ComboBoxOperator.addItem("/");
        ComboBoxOperator.addItem("*");             
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        txtFirstDigit = new javax.swing.JTextField();
        txtSecondDigit = new javax.swing.JTextField();
        btnCalculate = new javax.swing.JButton();
        lblFirstDigit = new javax.swing.JLabel();
        lblSecondDigit = new javax.swing.JLabel();
        ComboBoxOperator = new javax.swing.JComboBox();
        lblOperator = new javax.swing.JLabel();
        lblResult = new javax.swing.JLabel();
        lblHeader = new javax.swing.JLabel();
        btnConfigureServer = new javax.swing.JButton();
        txtResult = new javax.swing.JTextField();

        btnCalculate.setText("Calculate");
        btnCalculate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCalculateActionPerformed(evt);
            }
        });

        lblFirstDigit.setText("First Digit");

        lblSecondDigit.setText("Second Digit");

        ComboBoxOperator.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        lblOperator.setText("Operator");

        lblResult.setText("Result");

        lblHeader.setText("RMI Simple Calculator");

        btnConfigureServer.setText("Configure Server");
        btnConfigureServer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConfigureServerActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblFirstDigit, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblSecondDigit, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblOperator, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblResult, javax.swing.GroupLayout.Alignment.TRAILING))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblHeader)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(ComboBoxOperator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(btnCalculate))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(txtSecondDigit)
                        .addComponent(txtFirstDigit, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(txtResult, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnConfigureServer)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(12, 12, 12)
                .addComponent(lblHeader)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtFirstDigit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblFirstDigit))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtSecondDigit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblSecondDigit))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(ComboBoxOperator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblOperator)
                    .addComponent(btnCalculate))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblResult)
                    .addComponent(txtResult, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnConfigureServer)
                .addContainerGap(24, Short.MAX_VALUE))
        );
    }                       

    private void btnConfigureServerActionPerformed(java.awt.event.ActionEvent evt) {                                                   

    }                                                  

    private void btnCalculateActionPerformed(java.awt.event.ActionEvent evt) {                                             
        double firstdigit;
        double seconddigit;
        String operator;

        firstdigit = Double.valueOf(txtFirstDigit.getText());

        seconddigit = Double.valueOf(txtSecondDigit.getText());

        operator = ComboBoxOperator.getSelectedItem().toString();

        try
        {
            CoreInterface coreobj = (CoreInterface) Naming.lookup("localhost/Core");
            double result = (coreobj.calc(firstdigit,seconddigit,operator));
            txtResult.setText(Double.toString(result));
        }

        catch(Exception e)
        {
            txtResult.setText("e");
        }   
    }                                            

    private javax.swing.JComboBox ComboBoxOperator;
    private javax.swing.JButton btnCalculate;
    private javax.swing.JButton btnConfigureServer;
    private javax.swing.JLabel lblFirstDigit;
    private javax.swing.JLabel lblHeader;
    private javax.swing.JLabel lblOperator;
    private javax.swing.JLabel lblResult;
    private javax.swing.JLabel lblSecondDigit;
    private javax.swing.JTextField txtFirstDigit;
    private javax.swing.JTextField txtResult;
    private javax.swing.JTextField txtSecondDigit;
    // End of variables declaration                   
}

任何建议表示赞赏。

4

2 回答 2

2

该类MainCalculator是一个JPanel. AJPanel不能像那样显示,它必须是 a 的一部分Window。将其添加到 a并JFrame调用setVisible(true).JFrame

另外,@npinti 的建议非常好:在 EDT 线程中执行与 GUI 相关的代码。

于 2012-08-08T13:14:50.057 回答
1

该问题很可能出现在本节中:

public static void main(String[] args) {
        MainCalculator calc = new MainCalculator();
        calc.setVisible(true);
    }

您需要在事件调度程序线程 (EDT) 中执行任何与 GUI 相关的任务。

尝试这样的事情:

public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            { 
                MainCalculator calc = new MainCalculator();
                calc.setVisible(true);
            }
        });
    }
于 2012-08-08T12:50:43.207 回答