2016-03-23 12 views
0

Mein JPanel und JTextField werden aus irgendeinem Grund nicht angezeigt. Die einzige Aufgabe des Programms besteht darin, bei jedem Klick auf die Schaltfläche eine Zahl zum Zähler hinzuzufügen. Keine Kompilierungsfehler oder Probleme mit der Konsole. Einfach nicht auftauchen ??Einfaches Java-GUI-Programm

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

public class Swing 
{ 
public static void main(String[] args) 
{ 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      final JFrame mainFrame = new JFrame ("Counter (Program 1/2)"); 
      mainFrame.setVisible(true); 
      mainFrame.setSize(400, 200); 
      mainFrame.setLayout(new BorderLayout()); 
      mainFrame.setLocationRelativeTo(null); 
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


      JButton countButton = new JButton("Count up"); 
      mainFrame.add(countButton, BorderLayout.SOUTH); 

      countButton.addActionListener(new ActionListener() 
      { 
       @Override 
       public void actionPerformed(ActionEvent e) 
       { 
        JTextField clicks = new JTextField(BorderLayout.CENTER); 
        JPanel firstPanel = new JPanel(); 
        mainFrame.add(firstPanel); 
        mainFrame.add(clicks, BorderLayout.NORTH);  
        int counter = 1; 
        counter++; 
        String textField = String.valueOf(counter); 
        clicks.setText(textField); 

       } 
      });  
     } 
    });  
} 

}

Antwort

2

Fügen Sie nicht den JTextField und JPanel innerhalb die Action. Dies ist nicht sinnvoll, da Sie jedes Mal, wenn Sie die Taste drücken, neue Komponenten hinzufügen. Stattdessen fügen Sie sie bei der GUI-Erstellung hinzu, bevor Sie auf der GUI setVisible(true) aufrufen. Aktualisieren Sie dann den Text des Textfelds im ActionListener.

Als eine Nebenempfehlung: Versuchen Sie, Ihre Klasse mehr objektorientiert zu machen, indem Sie ihnen Felder, einen Konstruktor geben und den größten Teil dieses Codes aus der statischen Hauptmethode herausholen.

2

Ihre Fehler:

  1. clicks und firstpanel zum Rahmen hinzufügen in run Verfahren, nicht in dem sollte actionPerformed
  2. BorderLayout.CENTER als Parameter an add Methode übergeben werden, nicht in das Textfeld Konstruktor .
  3. Anzahl als static definieren. Dies ist nicht der beste Weg, aber in Ihrer Situation ist es der einfachste Weg.
  4. Rufen Sie mainFrame.setVisible(true);, nachdem Sie alle Ihre Komponenten hinzugefügt.

Hier ist der Arbeitscode:

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

public class Swing { 

    public static int counter = 1; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       final JFrame mainFrame = new JFrame("Counter (Program 1/2)"); 

       mainFrame.setSize(400, 200); 
       mainFrame.setLayout(new BorderLayout()); 
       mainFrame.setLocationRelativeTo(null); 
       mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JButton countButton = new JButton("Count up"); 
       mainFrame.add(countButton, BorderLayout.SOUTH); 

       final JTextField clicks = new JTextField(String.valueOf(counter)); 
       JPanel firstPanel = new JPanel(); 
       mainFrame.add(firstPanel, BorderLayout.CENTER); 
       mainFrame.add(clicks, BorderLayout.NORTH); 

       countButton.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 

         counter++; 
         String textField = String.valueOf(counter); 
         clicks.setText(textField); 

        } 
       }); 

       mainFrame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

Abstimmung geändert, danke. –

+0

Vielen Dank! Gibt es eine Möglichkeit, den Zähler in der Mitte des JTextFields auszurichten? – Dan

+0

'clicks.setHorizontalAlignment (JTextField.CENTER);' dies wird die Aufgabe erledigen. – rdonuk