SWT Wie kriege ich die Position des Textfeldes raus?

tanzverfuehrung

Bekanntes Mitglied
Ich habe ein Wizard, wo mehrere Textfelder untereinander sind und neben jeden Textfeld ein Button, wenn dieser Button gedrück wird, öffnet sich eine Shell mit einem ListViewer.

Die Shell soll sich jetzt genau unter dem Textfeld öffnen.
Also brauche ich die Position des Textfeldes....
egal was ich mache:
Java:
Point point = text.getLocation();
	
		Rectangle location = text.getBounds();
		
		Point textSize = text.getSize();

Bei allem kommt 0 raus.
Aber warum??
Könnte es daran liegen dass ich GridLayout benutze für den Wizard
Java:
GridLayout gridLayout = new GridLayout(3, false);

Wie kriege ich jetzt die Position meines Textfeldes raus?
 

Thallius

Top Contributor
org.eclipse.swt.widgets.Text

ICh würde behaupten das ist das gleiche, bloß in SWT anstatt AWT.
Es ist aufjedenfall nicht der Text (String), der im Textfeld steht.

Verstehe ich nicht...

In Swing hast du JTextField. Das must du irgendwo anlegen. Das kommt ja nicht dahergeflogen. Dort merkst Du Dir die Referenz in einer Property und später kannst du dann darüber die Position erfahren.

Gruß

Claus
 

tanzverfuehrung

Bekanntes Mitglied
Verstehe ich nicht...

In Swing hast du JTextField. Das must du irgendwo anlegen. Das kommt ja nicht dahergeflogen. Dort merkst Du Dir die Referenz in einer Property und später kannst du dann darüber die Position erfahren.

Gruß

Claus

Java:
	/**
	 * Erstellt eine {@link Text}-Komponente zusammen mit einem {@link Label} aus dem übergebenen
	 * {@link FormToolkit}.
*/
public static Text createTextWithLabel(FormToolkit toolkit, Composite parent, String text, int style) {
		assertParamNotNull(toolkit, "toolkit");
		assertParamNotNull(parent, "parent");
		assertParamNotNull(text, "text");

		Label label = toolkit.createLabel(parent, text, NONE);
		label.setBackground(parent.getBackground());
		label.setLayoutData(new GridData(RIGHT, CENTER, false, false, 1, 1));

		Text result = toolkit.createText(parent, "", style);
		result.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

		return result;
	}

Java:
/**
	 * Creates a text as a part of the form.
	 * 
	 * @param parent
	 *            the text parent
	 * @param value
	 *            the text initial value
	 * @param style
	 *            the text style
	 * @return the text widget
	 */
	public Text createText(Composite parent, String value, int style) {
		Text text = new Text(parent, borderStyle | style | orientation);
		if (value != null)
			text.setText(value);
		text.setForeground(colors.getForeground());
		text.setBackground(colors.getBackground());
		text.addFocusListener(visibilityHandler);
		return text;
	}
 

tanzverfuehrung

Bekanntes Mitglied
und woher ist jetzt deine Variable Text mit der du die Position abfragen willst?


erst wird diese methode aufgerufen, um das textfeld zu erstellen,
Java:
/**
	 * Erstellt eine Text-Komponente zusammen mit einem Label für eine bestimmte Nachricht.
	 * 
	 * @param composite
	 */
	public static Text createMessageText(Composite composite, FormToolkit toolkit, String labelDescription, Text text, String textBotId) {
		text = createTextWithLabel(toolkit, composite, labelDescription, FILL);
		text.setLayoutData(new GridData(FILL, CENTER, true, false, 1, 1));
		setBotId(text, textBotId);
		return text;
	}

danach wird diese methode aufgerufen , um die shell zu erstellen udn da wird die Text Variable, die in hier( createMessageText() ) erstellt wurde, übergeben

Java:
/**
	 * Erstellt den Dialog mit den auszuwählenden Variablen für das übergebene Textfeld.
	 * 
	 * @param text
	 *            das Textfeld, wo die Variable hinzugefügt werden soll
	 */
	public static Shell createVariablesDialog(final Text text, Shell dialog) {
		dialog = new Shell(text.getShell(), TOOL);
		// dialog.setText("Variablen hinzufügen");
		dialog.setSize(200, 200);
		dialog.setLayout(new FillLayout());

		Point point = text.getLocation();
		System.out.println("location:   x: " + point.x + "   y: " + point.y);
		Rectangle location = text.getBounds();
		System.out.println("bounds:   x: " + location.x + "   y: " + location.y + "     heigth: " + location.height + "     width: " + location.width);
		Point textSize = text.getSize();
		System.out.println("textSize:    x:" + textSize.x + "          y:" + textSize.y);

		dialog.setLocation(location.width, location.height);

		return dialog;
	}

und alle werte die ich mir ausgeben lasse, sind 0


Hoffe war jetzt verständlich
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

erst wird diese methode aufgerufen, um das textfeld zu erstellen,
...
danach wird diese methode aufgerufen , um die shell zu erstellen udn da wird die Text Variable, die in
hier( createMessageText() ) erstellt wurde, übergeben
....
und alle werte die ich mir ausgeben lasse, sind 0

Hoffe war jetzt verständlich
Na ja ... bedingt :autsch:

Man sieht zwar, dass bei den beiden Methoden "createMessageText" und "createVariablesDialog" jeweils ein "Text text" (übrigens beides ganz dumme Bezeichnungen! Was für ein Typ in denn "Text"?) übergeben wird, allerdings sehe ich die jeweiligen Aufrufe nicht !

Und das "text", dass in "createMessageText" gefüllt wirde, wird zwar am Ende zurück gegeben, MUSS dabei aber auf eine neue Variable gewschrieben werden, da dieses "text" selbst sonst nicht mehr bekannt ist!! Beide Variablen sind nur INNERHALB der jeweiligen Methoden bekannt !

Poste ggf. mal den gesamten Code !

Gruß
Klaus
 

dzim

Top Contributor
Hm... Ich hab mal genau so was gebaut, ist aber schon eine Weile her und den Code hab ich nicht mehr (hab die Firma gewechselt). Ich überlege mal, was es sein könnte. Wenn mir was einfällt, sag ich dir bescheid.
 

dzim

Top Contributor
Aus meinem Beispiel von gestern (wegen den Anzeigen des Buttons auf Focus) habe ich jetzt folgendes gemacht:
Java:
import java.util.ArrayList;

public class Test2 extends Composite {
	
	private Text text1;
	private Text text2;
	private Button button;
	
	/**
	 * Create the composite.
	 * 
	 * @param parent
	 * @param style
	 */
	public Test2(Composite parent, int style) {
		super(parent, style);
		setLayout(new GridLayout(3, false));
		
		Group grpLinks = new Group(this, SWT.NONE);
		GridData gd_grpLinks = new GridData(SWT.LEFT, SWT.FILL, false, true, 1, 1);
		gd_grpLinks.widthHint = 100;
		grpLinks.setLayoutData(gd_grpLinks);
		grpLinks.setText("links");
		
		Group grpMitte = new Group(this, SWT.NONE);
		grpMitte.setLayout(new GridLayout(1, false));
		grpMitte.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
		grpMitte.setText("mitte");
		
		text1 = new Text(grpMitte, SWT.BORDER);
		text1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		text1.addFocusListener(new FocusListener() {
			@Override
			public void focusLost(FocusEvent arg0) {}
			
			@Override
			public void focusGained(FocusEvent arg0) {
				button.setVisible(false);
			}
		});
		text1.setFocus();
		
		text2 = new Text(grpMitte, SWT.BORDER);
		text2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		text2.addFocusListener(new FocusListener() {
			@Override
			public void focusLost(FocusEvent arg0) {}
			
			@Override
			public void focusGained(FocusEvent arg0) {
				button.setVisible(true);
			}
		});
		
		button = new Button(grpMitte, SWT.NONE);
		button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
		button.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				showDialog(Test2.this);
			}
		});
		button.setText("Sichtbar, bei Fokus auf Textfeld 2");
		button.setVisible(false);
		
		Group grpRechts = new Group(this, SWT.NONE);
		GridData gd_grpRechts = new GridData(SWT.LEFT, SWT.FILL, false, true, 1, 1);
		gd_grpRechts.widthHint = 100;
		grpRechts.setLayoutData(gd_grpRechts);
		grpRechts.setText("rechts");
		
	}
	
	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	private void showDialog(Composite parent) {
		
		Point controlLocation = button.getLocation();
		Point displayLocation = button.toDisplay(controlLocation);
		displayLocation.y -= 40;
		Shell dialog = new Shell(parent.getDisplay(), SWT.TOOL | SWT.CLOSE);
		dialog.setLocation(displayLocation);
		dialog.setSize(200, 200);
		dialog.setText("Dialog");
		dialog.setLayout(new GridLayout(1, false));
		
		ListViewer viewer = new ListViewer(dialog);
		viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
		viewer.setContentProvider(new ArrayContentProvider());
		viewer.setLabelProvider(new LabelProvider());
		
		List<String> variables = new ArrayList<>();
		variables.add("Broccoli");
		variables.add("Bundt Cake");
		variables.add("Cabbage");
		variables.add("Candy Canes");
		variables.add("Eggs");
		variables.add("Potato Chips");
		variables.add("Milk");
		variables.add("Soda");
		variables.add("Chicken");
		variables.add("Cinnamon Rolls");
		
		viewer.setInput(variables);
		dialog.open();
	}
}

Achtung: Ich musste bei mir mit
Code:
displayLocation.y -= 40;
die Y-Koordinate etwas anpassen. Keine Ahnung, ob das bei dir auch so ist...
 

dzim

Top Contributor
Und du hast den Code hier ausprobiert? Warum geht er dann bei mir? Du verwendest ja sicher auch Windows.

Java:
        Point controlLocation = <yourControl>.getLocation();
        Point displayLocation = <yourControl>.toDisplay(controlLocation);
        // displayLocation.y -= 40; // if you need it...

        Shell dialog = new Shell(parent.getDisplay(), SWT.TOOL | SWT.CLOSE);
        dialog.setLocation(displayLocation);

        // [...]
        // the rest of your dialog initialization stuff...
Achtung:
Code:
<yourControl>
ist z.B. dein Text.
 

Thallius

Top Contributor
Ich glaube ich weiß jetzt erst was er will.

Er will die Position des Textes schon bei der Erstellung des Panels. Das kann natürlich nicht funktionieren da das Layout ja erst beim pack() gemacht wird.

gruß

Claus
 

dzim

Top Contributor
Kann ich mir nicht vorstellen, denn er will ja die Shell erst zeigen, wenn der Button gedrückt wurde (nachdem der dazugehörige Text fokusiert und der Buttons selbst sichtbar geworden ist). So zumindest habe ich es verstanden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
W JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
Z kriege kein paint AWT, Swing, JavaFX & SWT 13
A Ich kriege die Grössen einfach nicht auf die Reihe! AWT, Swing, JavaFX & SWT 6
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
C JavaFX Window-Position AWT, Swing, JavaFX & SWT 3
E JavaFX Cursor-Position im ScrollPane AWT, Swing, JavaFX & SWT 0
J BorderPane Position AWT, Swing, JavaFX & SWT 3
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
C LayoutManager JFrame größe und ausrichtung + Position von Fensterelementen AWT, Swing, JavaFX & SWT 2
B Popup auf der Textcoursor-Position AWT, Swing, JavaFX & SWT 5
O Swing Spalten-Position nach verschieben AWT, Swing, JavaFX & SWT 6
0 Swing JTextField - Position ? AWT, Swing, JavaFX & SWT 2
E Swing Objekt zu Position (Point) bewegen AWT, Swing, JavaFX & SWT 2
C Label wird nicht an der richtigen Position angezeigt.. AWT, Swing, JavaFX & SWT 7
TheWhiteShadow Swing Document Text Position in Pixel AWT, Swing, JavaFX & SWT 2
M Jtable - wie position einer Celle bestimmen bei Multiselect AWT, Swing, JavaFX & SWT 4
B MessageBox Position Verändern AWT, Swing, JavaFX & SWT 8
B Swing Komponente an Position eines Objektes ausgeben lassen AWT, Swing, JavaFX & SWT 3
B Position in einem Bild ermitteln AWT, Swing, JavaFX & SWT 3
B [ERLEDIGT]gui problem(genaue position von buttons ect.) AWT, Swing, JavaFX & SWT 9
M Position eines JLabels mit getX() auslesen AWT, Swing, JavaFX & SWT 2
M Position eines JLabels speichern? AWT, Swing, JavaFX & SWT 3
D Swing PopupMenu immer an gewünschte Position? AWT, Swing, JavaFX & SWT 2
W Swing Bild zeichnen wenn Maus an bestimmter Position ist AWT, Swing, JavaFX & SWT 4
R Swing GlazedLists UND Problem mit der Position des Cursors AWT, Swing, JavaFX & SWT 2
M 3D-Grafik Probleme mit Position der ViewPlatform AWT, Swing, JavaFX & SWT 4
C Caret Position mit X-Y-Koordinaten ermitteln AWT, Swing, JavaFX & SWT 2
J Swing Problem - Abspeichern JSplitPane Position AWT, Swing, JavaFX & SWT 5
E Swing Runde Buttons / Position eines Obj. im Layout AWT, Swing, JavaFX & SWT 7
S Feste Position einer Komponente auf Glasspane AWT, Swing, JavaFX & SWT 6
V Position der JScrollBar ändern AWT, Swing, JavaFX & SWT 5
T Z-Position der ViewPlatform? AWT, Swing, JavaFX & SWT 3
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
B aktuelle Position des Fensters ermitteln AWT, Swing, JavaFX & SWT 3
sylo Position des Icons bei JMenuItem AWT, Swing, JavaFX & SWT 11
H Y-Position mit get-/setLocation() unter Linux/Enlightement16 inkonsistent AWT, Swing, JavaFX & SWT 3
K JLayeredPane Elemente auf gleicher Position AWT, Swing, JavaFX & SWT 7
E Swing JLabel ändert seine Position nach setText AWT, Swing, JavaFX & SWT 2
G Absolute Position von Komponenten AWT, Swing, JavaFX & SWT 3
hdi SWT FileDialog wird an scheinbar beliebiger Position angezeigt AWT, Swing, JavaFX & SWT 2
K mehrere JTextFields - wie finde ich die Cursor-Position? AWT, Swing, JavaFX & SWT 5
lumo SWT Absolute position einer Composite/Control AWT, Swing, JavaFX & SWT 5
ElViZ End-Position eines gezeichneten Strings ermitteln. AWT, Swing, JavaFX & SWT 2
H Swing Illegal component position! AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JScrollBar-Position festlegen.. AWT, Swing, JavaFX & SWT 3
K Postion Y im Frame != Position Y ?? AWT, Swing, JavaFX & SWT 16
R Position einer Componente? AWT, Swing, JavaFX & SWT 9
A Label hat falsche Position AWT, Swing, JavaFX & SWT 4
M Scrollbar anpassen (Position) AWT, Swing, JavaFX & SWT 6
M GridBagLayout - Position immer zentriert AWT, Swing, JavaFX & SWT 5
J absolute Position einer JComponent ermitteln AWT, Swing, JavaFX & SWT 4
J JSplitpane separator soll nicht seine Position veraendern? AWT, Swing, JavaFX & SWT 3
P JButton Position rausfinden beim GridBagLayout AWT, Swing, JavaFX & SWT 2
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
X Dynamische linien (Position und Länge) AWT, Swing, JavaFX & SWT 4
G position im FlowLayout AWT, Swing, JavaFX & SWT 11
B Thumbnail-Position per Mausklick ändern AWT, Swing, JavaFX & SWT 3
& Position eines Fensters nicht verändern AWT, Swing, JavaFX & SWT 8
A Position des Fensters verändern AWT, Swing, JavaFX & SWT 21
U JTable Position der Spalte abfragen AWT, Swing, JavaFX & SWT 7
D JInternalFrame iconified Position nach parent-resize AWT, Swing, JavaFX & SWT 2
U Problem mit JButton (Position & Größe) AWT, Swing, JavaFX & SWT 7
W Schnappen der Größe und Position AWT, Swing, JavaFX & SWT 7
S Falsche Position, Elemente erscheinen nicht, Flackern AWT, Swing, JavaFX & SWT 6
S Position eines Fensters festlegen AWT, Swing, JavaFX & SWT 2
L Menu Position verändern? AWT, Swing, JavaFX & SWT 24
P JPanel im BorderLayout feste Größe/Position zuordnen AWT, Swing, JavaFX & SWT 3
T jTable / Spaltenbreite und Position AWT, Swing, JavaFX & SWT 2
J InternalFrames Grösse Position AWT, Swing, JavaFX & SWT 3
vogella JScrollPane - Position setzen der Scrollbalken AWT, Swing, JavaFX & SWT 5
M JPanel Position tut nicht, was sie soll AWT, Swing, JavaFX & SWT 8
T jTable Colum feste position AWT, Swing, JavaFX & SWT 3
S Position von Labels, Buttons, etc. festsetzen und Scrollen AWT, Swing, JavaFX & SWT 4
M GridBagLayout - Component Position AWT, Swing, JavaFX & SWT 4
B Setzen von Position > 90 bei JScrollbar nicht möglich AWT, Swing, JavaFX & SWT 3
M Position im JTree veraendern AWT, Swing, JavaFX & SWT 3
A Position im Text bei Rechtsklick AWT, Swing, JavaFX & SWT 7
T JScrollPane Scrollbar-Position AWT, Swing, JavaFX & SWT 2
Y BasicArrowButton + Größe und Position AWT, Swing, JavaFX & SWT 7
K Mouse Position nach Drag und Drop? AWT, Swing, JavaFX & SWT 4
lin ?JDialog?-nur best. Grösse und Position AWT, Swing, JavaFX & SWT 2
B JLabel ändert seine Position AWT, Swing, JavaFX & SWT 7
M Position von Eingabe-Fenster AWT, Swing, JavaFX & SWT 5
R text offset versus JTextComponent caret position AWT, Swing, JavaFX & SWT 6
G Probleme mit der Position eines JPanels AWT, Swing, JavaFX & SWT 2
T Größe und Position eines JLabels ermitteln AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit sofortiger Aktualisierung eine Textfeldes AWT, Swing, JavaFX & SWT 8
G Text eines noch aktiv editierten Textfeldes lesen AWT, Swing, JavaFX & SWT 2
W JTabel Header - Einfügen eines Textfeldes AWT, Swing, JavaFX & SWT 3
S Eingabe des Textfeldes in Variable speichern AWT, Swing, JavaFX & SWT 7
T Auslesen des korrekten Textfeldes AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben