2017-10-15 1 views
0

Ich versuche, eine einfache GUI zu erstellen, die zwei Werte nimmt und entweder subtrahiert/addiert/dividiert abhängig davon, welche Schaltfläche der Benutzer auswählt. Ich bin mit meinem Code zufrieden, aber aus irgendeinem Grund, wenn ich mein Programm starte, bekomme ich keinen sichtbaren Rahmen, und ich bekomme auch keine Fehler.JFrame wird nicht geöffnet, wenn Anwendung in Eclipse ausgeführt wird

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JButton; 
import java.awt.Font; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class Calc { 

private JFrame frame; 
private JTextField firstNumber; 
private JTextField secondNumber; 
private JTextField textField_2; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Calc window = new Calc(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public Calc() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setTitle("Simple Calculator"); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    firstNumber = new JTextField(); 
    firstNumber.setBounds(28, 41, 156, 26); 
    frame.getContentPane().add(firstNumber); 
    firstNumber.setColumns(10); 

    secondNumber = new JTextField(); 
    secondNumber.setBounds(28, 145, 156, 26); 
    frame.getContentPane().add(secondNumber); 
    secondNumber.setColumns(10); 

    JLabel lblNewLabel = new JLabel("First Number"); 
    lblNewLabel.setBounds(28, 27, 110, 16); 
    frame.getContentPane().add(lblNewLabel); 

    JLabel lblNewLabel_1 = new JLabel("Second Number"); 
    lblNewLabel_1.setBounds(28, 131, 110, 16); 
    frame.getContentPane().add(lblNewLabel_1); 

    JLabel answerLabel = new JLabel("ANSWER:"); 
    answerLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 20)); 
    answerLabel.setBounds(216, 46, 190, 16); 
    frame.getContentPane().add(answerLabel); 

    JButton plusButton = new JButton("Add"); 
    plusButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      try{ 
       int number1 = Integer.parseInt(firstNumber.getText()); 
      } 
      catch (Exception exc){ 
       JOptionPane.showMessageDialog(frame,"Error: bad first number."); 
       return; 
      } 
      try{ 
       int number2 = Integer.parseInt(secondNumber.getText()); 
      } 
      catch (Exception exc){ 
       JOptionPane.showMessageDialog(frame,"Error: bad second number."); 
       return; 
      } 
      int number1 = 0, number2 = 0; 
      int answer = number1 + number2; 
      answerLabel.setText("The answer is: "+answer); 
     } 
    }); 
    plusButton.setToolTipText("Adds first from second number"); 
    plusButton.setBounds(28, 183, 117, 29); 
    frame.getContentPane().add(plusButton); 

    JButton subtractButton = new JButton("Subtract"); 
    subtractButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      try{ 
       int number1 = Integer.parseInt(firstNumber.getText()); 
      } 
      catch (Exception exc){ 
       JOptionPane.showMessageDialog(frame,"Error: bad first number."); 
       return; 
      } 
      try{ 
       int number2 = Integer.parseInt(secondNumber.getText()); 
      } 
      catch (Exception exc){ 
       JOptionPane.showMessageDialog(frame,"Error: bad second number."); 
       return; 
      } 
      int number1 = 0, number2 = 0; 
      int answer = number1 - number2; 
      answerLabel.setText("The answer is: "+answer); 
     } 
    }); 
    subtractButton.setToolTipText("Subtracts first from second number"); 
    subtractButton.setBounds(157, 183, 117, 29); 
    frame.getContentPane().add(subtractButton); 

    JButton divideButton = new JButton("Divide"); 
    divideButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      try{ 
       int number1 = Integer.parseInt(firstNumber.getText()); 
      } 
      catch (Exception exc){ 
       JOptionPane.showMessageDialog(frame,"Error: bad first number."); 
       return; 
      } 
      try{ 
       int number2 = Integer.parseInt(secondNumber.getText()); 
      } 
      catch (Exception exc){ 
       JOptionPane.showMessageDialog(frame,"Error: bad second number."); 
       return; 
      } 
      int number1 = 0, number2 = 0; 
      int answer = number1/number2; 
      answerLabel.setText("The answer is: "+answer); 
     } 
    }); 
    divideButton.setToolTipText("Divides first from second number"); 
    divideButton.setBounds(289, 183, 117, 29); 
    frame.getContentPane().add(divideButton); 

    textField_2 = new JTextField(); 
    textField_2.setBounds(216, 94, 130, 26); 
    frame.getContentPane().add(textField_2); 
    textField_2.setColumns(10); 
} 
} 
+0

1) Java GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgrößen, Bildschirmauflösungen usw. mit verschiedenen PLAFs in verschiedenen Locales arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). 2) Es läuft gut in NetBeans (was nur *** *** *** interessant ist, da es unterstützt, dass dies ein IDE-Problem ist, wie Sie offensichtlich vermuten.) –

+0

BTW - Siehe auch dieses [Rechnerbeispiel] (http: // stackoverflow.com/a/7441804/418556). Es verwendet 'ScriptEngine', um den Ausdruck im Textfeld auszuwerten. –

Antwort

1

Ah! Das ist ein Problem, das ich zuvor erlebt habe. Dieser Tipp hat das Problem gelöst. Hier ist, wie es geht.

Stellen Sie sicher, dass Sie es gebaut haben. Oder Sie können Projekt -> Automatisch erstellen aktivieren.

Nachdem die oben genannte Option festgelegt wurde, versuchen Sie, den Arbeitsbereich zu reinigen. Projekt -> Säubern und bereinigen Sie alle importierten Projekte.

Starten Sie jetzt Eclipse neu und Sie können Ihr Programm starten.

ps: wenn es nicht funktioniert, bitte Bild von Eclipse mit Konsole senden, damit wir Protokolle und Bild der laufenden Konfiguration sehen konnten.

Verwandte Themen