Move console cursor to specified position
Asked Answered
G

5

30

I'm writing a simple console application (80x24) in Java.

Is there a gotoxy(x,y) equivalent for the console?

Geosynclinal answered 16/6, 2009 at 13:1 Comment(0)
B
44

If by gotoxy(x,y), you want to reposition your cursor somewhere specific on the console, you can usually use VT100 control codes to do this. See http://www.termsys.demon.co.uk/vtansi.htm.

Do something like

char escCode = 0x1B;
int row = 10; int column = 10;
System.out.print(String.format("%c[%d;%df",escCode,row,column));

Which should move the cursor to position 10,10 on the console.

Brawl answered 16/6, 2009 at 13:7 Comment(6)
These are ANSI control codes. en.wikipedia.org/wiki/ANSI_escape_code ANSI's even in the end of the link, but I don't blame you for not recognizing it. – Caterwaul
I think actually this can work even in Windows! Simply run your program in PowerShell instead of the in the regular command prompt. Either start PowerShell and then from there run your program or in the regular command prompt type powershell to start PowerShell and then in PowerShell start your program. This might require Windows 10 with the Anniversary Update. – Attrahent
@bmdelacruz doesn't work in my Windows 7 PowerShell :( Did you run it with any option? – Pleasurable
I used Windows 10 Powershell to try it out. I'm sorry, i don't know if i tried to run it with any options. I can't even remember where I used this. πŸ˜‚ – Novick
For me it doesn't work on Windows 10 (neither powershell, nor cmd), but it does work on cygwin. – Overtrump
this works on Windows 10 Version 1803 on the PowerShell and CMD – Wallow
S
9

I don't think there's a built-in function to do that in Java. There's a Java curses library called JCurses that you can use though.

Sinus answered 16/6, 2009 at 13:4 Comment(0)
B
4

Not without pulling in a console curses style library...

You can try javacurses and see if that helps you.

Barrettbarrette answered 16/6, 2009 at 13:5 Comment(0)
A
4

I found Lanterna to be a very good library. It does not dependend on any native library but runs 100% in pure Java.

It offers a Screen class which allows text output based on a coordinate system. For OS with a graphical environment it uses a Swing based terminal emulator. Unfortunately, you are not able to force terminal mode on Windows, so if you really need the terminal, use one of the solutions in the other answers.

Avens answered 22/4, 2013 at 13:56 Comment(2)
I only found laterna could do the one, very basic thing I neded: write(char, x, y, foreground, background). do you know of a more recent replacement or any alternatives? i'll probably go with laterna but found this topic difficult to research. – Range
@oberhamsi: Use screen.putString(). Example: screen.putString(0, 0, "foo", Color.WHITE, Color.BLACK); – Avens
D
0

The easiest way to do that in my opinion is using ANSI escape sequences.

For this specific operation we'll use the escape sequence H, to move to the point x,y we'll print to the screen ESC x;yH.

In java that will be System.out.print("\u001B" + x + ";" + y + "H");

Downtime answered 15/10, 2023 at 14:33 Comment(0)

© 2022 - 2024 β€” McMap. All rights reserved.