2017-12-28 42 views
-1
geändert werden kann
public class AddMult extends JFrame { 
    public AddMult() { 
    setSize(600, 600); 

    txtEnterNum = new JTextField(); 
    txtEnterNum.setSize(100,50); 
    lblEnterNum.setLocation(100, 150); 
    add(txtEnterNum); 
    txtEnterNum.setVisible(true); 


    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} Ich habe versucht, eine Form und eine JTextField auf sie zu schaffen. Aber das Problem ist, mein Standort und Größe funktioniert nicht. Das TextField füllt das gesamte Formular aus. Wie kann ich es reparieren?JTextField Größe nicht

+0

Haben Sie jemals txtEnterNum entfernt, das vorher existiert? –

+0

Die Antwort, die derzeit akzeptiert wird, ist die vollständige falsche Methode zum Dimensionieren und Positionieren des Textfelds. Ich (und viele andere) kann Ihnen den richtigen Rat dafür geben, aber zuerst müssen wir wissen, wie die gesamte GUI (zusammen mit irgendwelchen anderen Komponenten und Labels usw.) ** erscheinen soll. Stellen Sie ASCII-Grafiken oder eine einfache Zeichnung des * beabsichtigten * Layouts der GUI in minimaler Größe und wenn sie in der Größe veränderbar ist, mit mehr Breite und Höhe zur Verfügung, um zu zeigen, wie der zusätzliche Platz verwendet werden sollte. –

+0

BTW 1) Eine Höhe von 50 ist viel höher als ein Textfeld würde normalerweise erscheinen, es sei denn, es hat eine große Schrift. 2) 'txtEnterNum' Der 'enter num'-Teil dieses Namens legt nahe, dass ein' JSpinner' mit einem 'SpinnerNumberModel' ein besserer Programmieransatz und auch einfacher für den Benutzer ist. –

Antwort

-1

Die Größe funktioniert aufgrund des Standardlayouts (FlowLayout) in Ihrem JFrame nicht. Mit diesem Layout können Sie die Größe oder Position eines Objekts nicht ändern. Versuchen Sie Ihr eigenes Layout zu verwenden (ändern x und y-Werte, um die Größe und Position Ihrer Komponenten zu ändern):

setLayout(new LayoutManager() { 
     @Override 
     public void addLayoutComponent(String name, Component comp) { 



     } 

     @Override 
     public void removeLayoutComponent(Component comp) { 

     } 

     @Override 
     public Dimension preferredLayoutSize(Container parent) { 
      return null; 
     } 

     @Override 
     public Dimension minimumLayoutSize(Container parent) { 
      return null; 
     } 

     @Override 
     public void layoutContainer(Container parent) { 

     public void layoutContainer(Container parent) { 

      float modifierx = Toolkit.getDefaultToolkit().getScreenSize().width/100; 

      float Sizemodifier = Toolkit.getDefaultToolkit().getScreenSize().height/50; 

      float modifiery = Toolkit.getDefaultToolkit().getScreenSize().height/150; 

      int x=(int)(Toolkit.getDefaultToolkit().getScreenSize().width/modifierx); 

      int y=(int)(Toolkit.getDefaultToolkit().getScreenSize().height/modifiery); 

      int height =(int)(Toolkit.getDefaultToolkit().getScreenSize().height/Sizemodifier); 

      int DX =(int)(Toolkit.getDefaultToolkit().getScreenSize().width/modifierx); 

      int DY =(int)(Toolkit.getDefaultToolkit().getScreenSize().height/modifiery); 

      for(int i = 0; i<parent.getComponentCount();i++){ 

       if(i%2==0){ 

        parent.getComponent(i).setBounds(x,y,x,height); 

        x+= DX; 

       }else{ 

        parent.getComponent(i).setBounds(x,y,x,height); 

        x=Toolkit.getDefaultToolkit().getScreenSize().width/100; 

        y+=DY; 

       } 

      } 
     } 


    }); 

Sie haben das Layout in dem Konstruktor der JFrame setzen:

frame() { 

    setSize(600, 600); 
    setLayout(new LayoutManager() {...} 

    txtEnterNum = new JTextField(); 
    txtEnterNum.setSize(100, 50); 
    setLocation(100, 150); 
    add(txtEnterNum); 
    txtEnterNum.setVisible(true); 


    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
+0

Die Bearbeitung umreißt einen Ansatz, der alle vorhandenen Probleme von Null-Layouts berücksichtigt und sie in ein benutzerdefiniertes Layout einfügt. Es ist keine Verbesserung. In der Tat, angesichts der Tatsache, dass es genauso schlimm ist, aber Neulinge dazu bringen könnte, zu denken, dass es eine robustere Art ist, Dinge zu tun, macht es einen Schritt zurück. Fragen Sie sich selbst, wie funktioniert dieser benutzerdefinierte Layout-Manager für alle im ersten Satz meines ursprünglichen Kommentars erwähnten Faktoren? (Spoiler: tut es nicht.) –

+0

@AndrewThompson Ich habe den Code so geändert, wie ich denke, es passt sich jetzt an jede Bildschirmgröße an. Bitte überprüfe es und wenn du denkst, dass es einen Weg gibt, es zu verbessern, sag es mir. –