2012-04-13 4 views
-1

Mögliche Duplizieren:
Im not sure how to get the data from my text fieldSeite ist nicht erfrischend oder nicht immer die Eingabe von meinem Textfeld

Ich bin eine Nummer in ein Textfeld eingeben und mit diesem Eingang ein ändern int, das die Größe eines Rechtecks ​​ändern wird, ich bin nicht sicher, ob etwas falsch ist, wo ich nicht die Daten aus diesem Textfeld bekomme oder die Seite nicht neu lädt, nachdem sie diese Daten bekommen hat.

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.*; 
import java.io.*; 
import javax.imageio.*; 
import javax.swing.*; 
import java.net.*; 
import java.sql.*; 
import java.lang.Object; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 


public class Test extends JPanel implements ActionListener{ 

    JTextField textField; 
    JFrame f=new JFrame(); 
    int x=77, y=441, w=23, h=10, entry; 
    BufferedImage img=null; 

    // BufferedImage img; 

    public static void main(String[] args) { 
     BufferedImage img =new BufferedImage(100, 50,BufferedImage.TYPE_INT_ARGB); 
     //textField = new JTextField(); 
     JFrame f = new JFrame("Load Image Sample"); 
     JTextField textField=new JTextField(); 
     f.add(textField); 
     textField.setBounds(10,10,40,30); 
     textField.setVisible(true); 

     f.addWindowListener(new WindowAdapter(){ 
       public void windowClosing(WindowEvent e) { 
        System.exit(0); 
       } 
      }); 

     f.add(new Test()); 
     f.pack(); 
     f.setVisible(true); 
    } 


    public void paintComponent(Graphics g) { 
     g.drawImage(img, 0, 0, null); 

     Graphics2D i = img.createGraphics(); 
     Color myColor = Color.decode("#32004b"); 
     i.setColor(myColor); 
     i.fillRect(x,y,w,h); 

      // g.fillRect(10,10,10,10); 
    } 

    public Test() { 

     try { 
      img = ImageIO.read(new File("sales-goal.png")); 
     } catch (IOException e) {} 


       //77,441,23,10 
    } 

    public Dimension getPreferredSize() { 
     if (img == null) { 
      return new Dimension(100,100); 
     } else { 
      //return new Dimension(img.getWidth(null), img.getHeight(null)); 
      return new Dimension(300,600); 
     } 
    } 

    public void actionPerformed(ActionEvent e) { 

     Graphics g= getGraphics(); 
     textField.addActionListener(this); 

       if (e.getSource() == textField) { 
        entry= Integer.parseInt(textField.getText()); 
        g.drawString("Test",50,50); 

        entry=h; 

       }   
    } 
} 

Antwort

1

Du

JTextField textField=new JTextField(); 

im Hauptverfahren zu tun, die eine neue lokale Variable schafft aber Ihre globalen JTextField textField; nie zugeordnet ist. In Ihrer actionPerformed verwenden Sie die globale textField, die nie initialisiert wird.

+0

Sie erscheinen auch nicht die Aktion Hörer an der richtigen Stelle zu zuweisen. Aber dein Punkt ist auch definitiv gültig. – gnomed

+0

Wie benutze ich mein globales textField in main? – user1329836

+0

Sie setzen die gesamte Initialisierung in die statische main und aus diesem Grund können Sie nicht auf die globalen Variablen (Instanz) zugreifen. Ich schlage vor, dass Sie die JFrame-Klasse separat erweitern, damit Sie die Instanzvariablen verwenden können. – evanwong

0

ich diese Zeile in der Hauptmethode ersetzen würde:

JTextField textField=new JTextField(); 

Mit diesen:

textField=new JTextField(); 
textField.addActionListener(this); 

Dann diese Zeile aus Ihrer actionPerformed Methode würde ich entfernen:

textField.addActionListener(this); 
+0

Ich habe es versucht, aber es lässt mich nicht referenziere ein nicht statisches vaiables Textfeld aus einem statischen Kontext – user1329836

+0

Dann mache es statisch. Ehrlich gesagt würde ich meine Hauptmethode nicht in erster Linie in den JPanel stellen, was eine Menge dieser Verwirrung eliminieren würde, aber Sie könnten die Variable immer zu Beginn Ihres Programms als statisch deklarieren. Ersetzen Sie einfach 'JTextField textField;' mit 'static JTextField textField;' – gnomed

+0

Ich würde auch einige Swing-Tutorials empfehlen. Meine ersten Swing-GUIs waren furchtbar und es dauerte eine Ewigkeit, bis ich zu einem Punkt kam, an dem ich auf meine Designs vertraue. Es mag sich mühsam anhören, aber die einzige Art zu lernen ist, es zu tun, also sind Tutorials eine große Hilfe. Aber wenn Sie nicht planen, in Zukunft viel GUI-Entwicklung zu machen, dann können Sie mit einer hackischen Lösung auskommen (solange es richtig funktioniert). – gnomed

1

Declare die Variable als

 private static JTextField textField; 

entfernen ‚JTextField‘ und verwenden Sie es als

 textField = new JTextField(); 

in Ihrem Hauptverfahren

Verwandte Themen