2016-05-25 6 views
1

Ich versuche, die Position (Start + Ende) von Text in einem JTextField auszurichten, aber ich konnte nicht finden und/oder zu verstehen, wie dies zu tun ist. ..Ändern JTextField Scrollpane Text Auffüllen/Offset um einige Pixel

example of what is wrong and what i'm looking for:

die setHorizontalAlignment Methode erlaubt nur das ..:

•JTextField.LEFT 
•JTextField.CENTER 
•JTextField.RIGHT 
•JTextField.LEADING 
•JTextField.TRAILING 

mit android-Projekten, das so einfach ist, ... aber im Interesse von mir, ich kann nicht verstehen dieses eine, wenn du ein Swing-Projekt machst ... Wie kann das gemacht werden?

EDIT:

Ich habe in der Lage, diese zu sortieren, durch einen Doppelklick mit (aka lagig) JTextFields. emptyborder(), obwohl einfacher Code, entfernt alle JTextField Frame Grenzen, so dass Sie mit einem großen leeren Quadrat, was für ein Eingabefeld, ist es keine gute Idee ... hier ist ein Bild und einige Codebeispiel:

JTextField Padding Working example

import java.awt.Font; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.SwingConstants; 
import javax.swing.border.EmptyBorder; 

public class TextBoxOffset { 

    public static void main(String[] a) { 

     JFrame frame = new JFrame(); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 

     JLabel label1 = new JLabel("JTextField, using CreateEmptyBorder"); 
     label1.setHorizontalAlignment(SwingConstants.CENTER); 
     label1.setFont(new Font("Tahoma", Font.PLAIN, 11)); 
     label1.setBounds(0, 125, 284, 23); 
     frame.getContentPane().add(label1); 

     //Creates a new JTextField with a emptyborder 
     JTextField emptyborder = new JTextField(); 
     emptyborder.setBounds(22, 164, 250, 43); 
     emptyborder.setBorder(new EmptyBorder(5, 17, 5, 15)); 
     frame.getContentPane().add(emptyborder); 

     JLabel label2 = new JLabel("JTextField, using double (layered) JTextFields"); 
     label2.setFont(new Font("Tahoma", Font.PLAIN, 11)); 
     label2.setHorizontalAlignment(SwingConstants.CENTER); 
     label2.setBounds(0, 22, 284, 23); 
     frame.getContentPane().add(label2); 

     // Creates a new input field, layered above the (disabled) JTextField background object 
     JTextField inputbox = new JTextField(); 
     inputbox.setBounds(40, 61, 216, 31); 
     inputbox.setBorder(null); 
     frame.getContentPane().add(inputbox); 

     // Creates a border for the input text field that will serve as a background 
     JTextField bg = new JTextField(); 
     bg.setBounds(22, 56, 250, 43); 
     frame.getContentPane().add(bg); 
     bg.setEnabled(false); 

     // Grab the overlayed inputbox focus 
     inputbox.requestFocusInWindow(); 
    } 
} 

Wenn jemand weiß besser, einfachen Weg, dies zu tun, das heißt, steuert den Text Polsterungen an allen Seiten (oben, links, unten, rechts), in einem JTextField (oder ein anderes Feld für das, was zählt (zB: steuere die Position des Textes innerhalb einer Schaltfläche), ohne doppelte JTextFields zu verwenden, schreibe bitte eine Antwort

+0

Versuchen Sie Caretlistener zu Ihrem Textfeld hinzufügen, überprüfen Sie diese http://www.java2s.com/Tutorial/Java/0260__Swing-Event/CaretEventsandListeners.htm – PeaceIsPearl

+0

Caretlistener, liest nur die Position des Caret - es ist nicht genau das, was ich suche ich. –

Antwort

2

Ich denke du willst

textField.add(new EmptyBorder(...)); 

Lesen Sie den Abschnitt aus den Swing-Tutorial auf How to Use Borders für weitere Informationen und Beispiele: eine Grenze zu Ihrem Textfeld hinzuzufügen.

ich kann das nicht herausfinden, wenn ich ein Swing-Projekt mache.

Behalten Sie den Link zum Swing-Tutorial praktisch für Swing-Grundlagen.

Edit:

Oops, ich vergaß ein JTextField auch eine spezielle Methode, dies zu kontrollieren hat:

textField.setInsets(...); 

Sie müssen also nicht die CompoundBorder, aber so noch Sie von der Flexibilität bewusst sein, bereitgestellt von einem CompoundBorder.

+0

Ja, mit EmptyBorder() können Sie die oberen, linken, unteren und rechten Paddings in einem JTextField steuern ... aber mit einem großen Nachteil: Sie verlieren alle JTextField-Grenzen und erzwingen: a) ein a Hintergrund, "betrügt" den Effekt eines JTextField-Rahmens (Hinweis: Die Verwendung von statischen Bildern kann zu Problemen führen, wenn Sie das Fenster dynamisch skalieren müssen!); b) ein geschichtetes JTextField mit seinem eigenen Rand (wodurch der Zweck, EmptyBorder() zusammen zu haben, ungültig wird). Ich habe meine Frage bearbeitet und ein Arbeitsbeispiel mit Letzterem hinzugefügt. –

+0

@JoaoAlsono, dann können Sie einen 'CompoundBorder' verwenden. Der 'CompoundBorder' kann den ursprünglichen Rahmen und den leeren Rahmen enthalten.Lesen Sie das Tutorial, es hat ein Beispiel eines 'CompoundBorder'. – camickr

+0

@JoaoAlonso Siehe bearbeiten .. – camickr

Verwandte Themen