Therefore is there a way that I can change the resolution settings in windows through java code?
1.yes is possible, why not
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.image.BufferStrategy;
public class MultiBufferTest {
private Frame mainFrame;
private static Color[] COLORS = new Color[]{
Color.red, Color.blue, Color.green, Color.white, Color.black,
Color.yellow, Color.gray, Color.cyan, Color.pink, Color.lightGray,
Color.magenta, Color.orange, Color.darkGray};
private static DisplayMode[] BEST_DISPLAY_MODES = new DisplayMode[]{
new DisplayMode(640, 480, 32, 0),
new DisplayMode(640, 480, 16, 0),
new DisplayMode(640, 480, 8, 0)};
public MultiBufferTest(int numBuffers, GraphicsDevice device) {
try {
GraphicsConfiguration gc = device.getDefaultConfiguration();
mainFrame = new Frame(gc);
mainFrame.setUndecorated(true);
mainFrame.setIgnoreRepaint(true);
device.setFullScreenWindow(mainFrame);
if (device.isDisplayChangeSupported()) {
chooseBestDisplayMode(device);
}
Rectangle bounds = mainFrame.getBounds();
mainFrame.createBufferStrategy(numBuffers);
BufferStrategy bufferStrategy = mainFrame.getBufferStrategy();
for (float lag = 2000.0f; lag > 0.00000006f; lag = lag / 1.33f) {
for (int i = 0; i < numBuffers; i++) {
Graphics g = bufferStrategy.getDrawGraphics();
if (!bufferStrategy.contentsLost()) {
g.setColor(COLORS[i]);
g.fillRect(0, 0, bounds.width, bounds.height);
bufferStrategy.show();
g.dispose();
}
try {
Thread.sleep((int) lag);
} catch (InterruptedException e) {
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
device.setFullScreenWindow(null);
}
}
private static DisplayMode getBestDisplayMode(GraphicsDevice device) {
for (int x = 0; x < BEST_DISPLAY_MODES.length; x++) {
DisplayMode[] modes = device.getDisplayModes();
for (int i = 0; i < modes.length; i++) {
if (modes[i].getWidth() == BEST_DISPLAY_MODES[x].getWidth()
&& modes[i].getHeight() == BEST_DISPLAY_MODES[x].getHeight()
&& modes[i].getBitDepth() == BEST_DISPLAY_MODES[x].getBitDepth()) {
return BEST_DISPLAY_MODES[x];
}
}
}
return null;
}
public static void chooseBestDisplayMode(GraphicsDevice device) {
DisplayMode best = getBestDisplayMode(device);
if (best != null) {
device.setDisplayMode(best);
}
}
public static void main(String[] args) {
try {
int numBuffers = 2;
if (args != null && args.length > 0) {
numBuffers = Integer.parseInt(args[0]);
if (numBuffers < 2 || numBuffers > COLORS.length) {
System.err.println("Must specify between 2 and " + COLORS.length + " buffers");
System.exit(1);
}
}
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = env.getDefaultScreenDevice();
MultiBufferTest test = new MultiBufferTest(numBuffers, device);
} catch (Exception e) {
e.printStackTrace();
}
System.exit(0);
}
}
2.don’t do that, could annoying users, and on code lack can to change resolution in Native OS
(my coworker has more than 100shortcuts on three screen, any change for resolution to change shotcuts size
and location
, result is simple mess)
3.use JLabel
for Icons
(layed with proper LayoutManager
into container), or put Icons
to the JList
or JTable
, then you never / don’t care about something
4.use only LayoutManager
rather than possitioning or change for screen resolution, you can set for smaller Size
(for JFrame
) on the screen for Apps start_up
, let’s user decide about final Dimmension
on her/his screen
Наверняка многие сталкивались с проблемой, когда Java-игра ни в какую не хочет растягиваться на весь экран мобильного телефона. Играть, конечно, можно, но удовольствие резко падает, вы нервничаете, обижаетесь на производителя и разработчика, а затем в сердцах удаляете игрушку. И совершенно зря, потому что есть способы справиться с этой неприятностью!
Итак, способ первый, самый простой. Весь процесс требует установки на ваш компьютер бесплатного стороннего приложения JarResize. Это шаг первый. Шаг второй – после завершения установки вышеназванного приложения скачайте на компьютер Java-игру, разрешение которой вы намерены изменить. Для осуществления следующего шага вам необходимо знать исходное разрешение игры и разрешение дисплея вашего мобильного телефона. Когда такая информация получена, смело открывайте приложение JarResize и выбирайте исходное разрешение игры, а затем – желаемое (то, которого требует ваш телефон).
После этого кликаете на кнопке Select & Resize («Выбрать и Изменить размер») и выделяете jar-файл игры, которую вы уже предварительно загрузили. Шаг последний — закройте приложение и установите игру на свой мобильный телефон.
Если вы не нашли приложение JarResize или считаете его использование трудоемким (что довольно странно), тогда вам подойдет второй способ – изменение разрешения Java-игры вручную. Итак, сначала скачайте Java-игру на рабочий стол и распакуйте jar-файл, другими словами, откройте ее с помощью архиватора – WinRar или WinZip. В папке, которую вы открыли, есть несколько подпапок, среди них найдите папку с названием META-INF, откройте ее и найдите файл MANIFEST.MF.
Перетащите MANIFEST.MF на рабочий стол и откройте его с помощью Блокнота. Далее – самое главное. В самом конце файла нужно добавить вручную две строки:
Первая строка: Nokia-MIDlet-Original-Display-Size: XXX, YYY (XXX, YYY – здесь указываем оригинальное разрешение Java-игры)
Вторая строка: Nokia-MIDlet-Target-Display-Size: ZZZ, WWW (ZZZ, WWW – здесь указываем требуемое разрешение игры в соответствии с разрешением вашего мобильного телефона)
Например, разрешение Java-игры – 176 х 208, а дисплей вашего телефона требует разрешения 240 х 320, тогда строчки будут выглядеть так:
Nokia-MIDlet-Original-Display-Size:176,208
Nokia-MIDlet-Target-Display-Size: 240,320
Естественно, разрешение может варьироваться в зависимости от игры и модели вашего мобильного телефона, поэтому будьте внимательны. После этого следует сохранить файл MANIFEST.MF и перетащить его обратно в папку META-INF. После этого останется только заново упаковать jar-файл (.jar file), используя WinRar или WinZip. Разрешение изменено, а значит, можно устанавливать игрушку на телефон и наслаждаться игрой в полном объеме.
Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Asked
6 years, 10 months ago
Viewed
656 times
Is there a way to right a program in java that when I run it, it changes the screen resolution of my laptop? Not just the resolution of the program running but of the entire laptop. There is a separate game that I need to run in 720 and it’s a pain to change it everytime, it’d be easier if I was just able to run this program to change it. Thanks!
- java
- screen
- resolution
asked Apr 12, 2016 at 18:52
4
-
Is it important that it’s Java? A language like AutoHotkey that’s designed for scripting these kinds of OS-specific shortcut might be a lot simpler here.
Apr 12, 2016 at 19:02
-
I’ll check out AutoHotKey, thanks! I only know java and c++ but prefer java so I thought that’d be the easiest!
Apr 12, 2016 at 19:25
-
And, jhort, thanks for that link! I’ll check that out later, but for now it seems this AutoHotKey is much simpler for what I need!
Apr 12, 2016 at 19:26
- The Overflow Blog
- Featured on Meta
Linked
Related
Hot Network Questions
-
Should one’s bum be behind, or merely over, the lowered saddle on steeper descents?
-
How to get better at taking constructive criticism
-
Carbon fiber frames and household heating/radiators: how close is too close?
-
Is there an adjective for «of eight years, eight years old»?
-
What features should I include in a presentation of a heavily inflected conlang that copies the format of 19th century grammars?
-
Is SQL Server able to use internal parallelism for an update statement?
-
How does the ability to solve a new problem comes to a person?
-
How to temporarily catch leaks trickling down the outside of a pipe
-
What is a sure shot way of proving citizenship of India?
-
Why doesn’t this 767 nose paint line up with the rest of the paint?
-
Upper limit of human comfort in higher atmospheric pressures?
-
Why are some pH standard solutions 6.86 and 9.18?
-
De Gruyter and De Gruyter Mouton: the difference
-
Noun with little to no references online
-
My cat is fighting for his life with chronic calicivirus
-
I’m new to D&D: where to begin?
-
Why all the warnings about failure to raise the U.S. debt ceiling when some argue that Biden could just ignore it?
-
What does this Field Hospital joke mean in Blackadder Goes Forth?
-
«I am select for the job» «I got/became select for the job»
-
First work to depict Mr. Hyde as superhuman
-
How can lossless compression ever exist?
-
Is it correct to use both «first» and «initial» in «first initial reaction»?
-
Did Soviet Union ever apologize for its alliance with Germany before 1941?
-
The body in the cellar
more hot questions
Question feed
Your privacy
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Asked
6 years, 10 months ago
Viewed
656 times
Is there a way to right a program in java that when I run it, it changes the screen resolution of my laptop? Not just the resolution of the program running but of the entire laptop. There is a separate game that I need to run in 720 and it’s a pain to change it everytime, it’d be easier if I was just able to run this program to change it. Thanks!
- java
- screen
- resolution
asked Apr 12, 2016 at 18:52
4
-
Is it important that it’s Java? A language like AutoHotkey that’s designed for scripting these kinds of OS-specific shortcut might be a lot simpler here.
Apr 12, 2016 at 19:02
-
I’ll check out AutoHotKey, thanks! I only know java and c++ but prefer java so I thought that’d be the easiest!
Apr 12, 2016 at 19:25
-
And, jhort, thanks for that link! I’ll check that out later, but for now it seems this AutoHotKey is much simpler for what I need!
Apr 12, 2016 at 19:26
- The Overflow Blog
- Featured on Meta
Linked
Related
Hot Network Questions
-
Get total sales grouped by customer and product
-
Is every Clifford gate conjugate to a diagonal Clifford gate?
-
Count the number of disjoint 11 blocks
-
Threading arguments from lists of different size
-
What is the name of the pedal assembly in an aircraft cockpit?
-
I’m new to D&D: where to begin?
-
Designing a portable space elevator
-
The body in the cellar
-
How do I make agile process more comfortable for introverts?
-
How to get better at taking constructive criticism
-
Noun with little to no references online
-
Allowing more hyphenation breaks to reduce interword space
-
Why is mind interacting with matter any more problematic than matter interacting with matter?
-
Is SQL Server able to use internal parallelism for an update statement?
-
Org Babel Shell Command
-
Why does QAM modulation produce asymmetric sidebands?
-
Involving a witness in the settling of an objection
-
How to temporarily catch leaks trickling down the outside of a pipe
-
When quoting issuing commands to multiple individuals, should each new person be a new paragraph?
-
Why is there a jumper between these circuit breakers?
-
How to exactly calculate the volume?
-
Can a Githyanki silver sword be used as a means to kill a lich or other similar «immortal» being?
-
What is the opposite of «for free»?
-
First pre-1940s SF story that mentions the use of an atomic bomb
more hot questions
Question feed
Your privacy
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Поэтому есть ли способ изменить настройки разрешения в Windows через код Java?
1.да можно, почему бы и нет
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.image.BufferStrategy;
public class MultiBufferTest {
private Frame mainFrame;
private static Color[] COLORS = new Color[]{
Color.red, Color.blue, Color.green, Color.white, Color.black,
Color.yellow, Color.gray, Color.cyan, Color.pink, Color.lightGray,
Color.magenta, Color.orange, Color.darkGray};
private static DisplayMode[] BEST_DISPLAY_MODES = new DisplayMode[]{
new DisplayMode(640, 480, 32, 0),
new DisplayMode(640, 480, 16, 0),
new DisplayMode(640, 480, 8, 0)};
public MultiBufferTest(int numBuffers, GraphicsDevice device) {
try {
GraphicsConfiguration gc = device.getDefaultConfiguration();
mainFrame = new Frame(gc);
mainFrame.setUndecorated(true);
mainFrame.setIgnoreRepaint(true);
device.setFullScreenWindow(mainFrame);
if (device.isDisplayChangeSupported()) {
chooseBestDisplayMode(device);
}
Rectangle bounds = mainFrame.getBounds();
mainFrame.createBufferStrategy(numBuffers);
BufferStrategy bufferStrategy = mainFrame.getBufferStrategy();
for (float lag = 2000.0f; lag > 0.00000006f; lag = lag / 1.33f) {
for (int i = 0; i < numBuffers; i++) {
Graphics g = bufferStrategy.getDrawGraphics();
if (!bufferStrategy.contentsLost()) {
g.setColor(COLORS[i]);
g.fillRect(0, 0, bounds.width, bounds.height);
bufferStrategy.show();
g.dispose();
}
try {
Thread.sleep((int) lag);
} catch (InterruptedException e) {
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
device.setFullScreenWindow(null);
}
}
private static DisplayMode getBestDisplayMode(GraphicsDevice device) {
for (int x = 0; x < BEST_DISPLAY_MODES.length; x++) {
DisplayMode[] modes = device.getDisplayModes();
for (int i = 0; i < modes.length; i++) {
if (modes[i].getWidth() == BEST_DISPLAY_MODES[x].getWidth()
&& modes[i].getHeight() == BEST_DISPLAY_MODES[x].getHeight()
&& modes[i].getBitDepth() == BEST_DISPLAY_MODES[x].getBitDepth()) {
return BEST_DISPLAY_MODES[x];
}
}
}
return null;
}
public static void chooseBestDisplayMode(GraphicsDevice device) {
DisplayMode best = getBestDisplayMode(device);
if (best != null) {
device.setDisplayMode(best);
}
}
public static void main(String[] args) {
try {
int numBuffers = 2;
if (args != null && args.length > 0) {
numBuffers = Integer.parseInt(args[0]);
if (numBuffers < 2 || numBuffers > COLORS.length) {
System.err.println("Must specify between 2 and " + COLORS.length + " buffers");
System.exit(1);
}
}
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = env.getDefaultScreenDevice();
MultiBufferTest test = new MultiBufferTest(numBuffers, device);
} catch (Exception e) {
e.printStackTrace();
}
System.exit(0);
}
}
2. не делайте этого, это может раздражать пользователей, а отсутствие кода может изменить разрешение в Native OS
(у моего коллеги более 100 ярлыков на трех экранах, любое изменение разрешения для изменения сокращений size
и location
, результат просто бардак)
3. использование JLabel
для Icons
(уложен с надлежащим LayoutManager
в контейнер) или положить Icons
до JList
or JTable
, то вас никогда/не волнует что-то
4. использовать только LayoutManager
вместо того, чтобы позиционировать или изменять разрешение экрана, вы можете установить меньшее Size
(для JFrame
) на экране для Apps start_up
, пусть пользователь решит о финале Dimmension
на ее/его экране