2016-07-24 4 views
1

Я разработал настольное приложение, использующее библиотеки SWT для графического интерфейса. Запуск приложения на Windows 7 выполняется нормально, макет чист. Я попытался запустить такое же приложение в Windows 10, и это катастрофа! Шрифт огромные и вырезанные окна, ужасные!Библиотека Java SWT ужасная компоновка в Windows 10

Я отключил масштабирование дисплея и поместил 100% в опции просмотра, но ничего не оставил. Как я могу решить эту проблему?

Спасибо тем, кто хочет мне помочь.

java,
Snippet: 
 

 
import org.eclipse.swt.SWT; 
 
import org.eclipse.swt.widgets.Display; 
 
import org.eclipse.swt.widgets.Shell; 
 
import org.eclipse.swt.layout.GridLayout; 
 
import org.eclipse.swt.widgets.Composite; 
 
import org.eclipse.swt.widgets.Label; 
 
import org.eclipse.swt.layout.GridData; 
 
import org.eclipse.swt.widgets.Text; 
 
import org.eclipse.swt.widgets.Button; 
 
import org.eclipse.wb.swt.SWTResourceManager; 
 

 
public class mySWTApp extends Shell { 
 
\t private Text txt_name; 
 
\t private Text txt_surname; 
 

 
\t /** 
 
\t * Launch the application. 
 
\t * @param args 
 
\t */ 
 
\t public static void main(String args[]) { 
 
\t \t try { 
 
\t \t \t Display display = Display.getDefault(); 
 
\t \t \t mySWTApp shell = new mySWTApp(display); 
 
\t \t \t shell.open(); 
 
\t \t \t shell.layout(); 
 
\t \t \t while (!shell.isDisposed()) { 
 
\t \t \t \t if (!display.readAndDispatch()) { 
 
\t \t \t \t \t display.sleep(); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } catch (Exception e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t } 
 
\t } 
 

 
\t /** 
 
\t * Create the shell. 
 
\t * @param display 
 
\t */ 
 
\t public mySWTApp(Display display) { 
 
\t \t super(display, SWT.SHELL_TRIM); 
 
\t \t setBackground(SWTResourceManager.getColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT)); 
 
\t \t setBackgroundMode(SWT.INHERIT_DEFAULT); 
 
\t \t setLayout(new GridLayout(1, false)); 
 
\t \t 
 
\t \t Composite composite = new Composite(this, SWT.BORDER); 
 
\t \t composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT)); 
 
\t \t composite.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.NORMAL)); 
 
\t \t composite.setLayout(new GridLayout(2, false)); 
 
\t \t composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
 
\t \t 
 
\t \t Label lblNewLabel = new Label(composite, SWT.NONE); 
 
\t \t lblNewLabel.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.NORMAL)); 
 
\t \t lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); 
 
\t \t lblNewLabel.setText("Name"); 
 
\t \t 
 
\t \t txt_name = new Text(composite, SWT.BORDER); 
 
\t \t txt_name.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 
 
\t \t 
 
\t \t Label lblNewLabel_1 = new Label(composite, SWT.NONE); 
 
\t \t lblNewLabel_1.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.NORMAL)); 
 
\t \t lblNewLabel_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); 
 
\t \t lblNewLabel_1.setText("Surname"); 
 
\t \t 
 
\t \t txt_surname = new Text(composite, SWT.BORDER); 
 
\t \t txt_surname.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 
 
\t \t 
 
\t \t Button btn_add = new Button(composite, SWT.NONE); 
 
\t \t btn_add.setFont(SWTResourceManager.getFont("Tahoma", 9, SWT.NORMAL)); 
 
\t \t GridData gd_btn_add = new GridData(SWT.CENTER, SWT.CENTER, false, false, 2, 1); 
 
\t \t gd_btn_add.widthHint = 126; 
 
\t \t btn_add.setLayoutData(gd_btn_add); 
 
\t \t btn_add.setText("Insert"); 
 
\t \t createContents(); 
 
\t } 
 

 
\t /** 
 
\t * Create contents of the shell. 
 
\t */ 
 
\t protected void createContents() { 
 
\t \t setText("Basic Name"); 
 
\t \t setSize(450, 135); 
 

 
\t } 
 

 
\t @Override 
 
\t protected void checkSubclass() { 
 
\t \t // Disable the check that prevents subclassing of SWT components 
 
\t } 
 
}

+2

Можете ли вы предоставить версию затмения. И фрагмент кода? – Sravan

+0

Возможно, проблема связана с вашими настройками в Win 8? –

+0

Eclipse Mars .2. SWT 4.5 стабильная версия. Последняя версия Windowsbuilder. – Umberto

ответ

0

У меня была эта проблема в последнее время, и думал, что это было связано с ОС Windows 10. Немного исследований показали, что реальная причина была более высокое разрешение нового ПК, который поставляется вместе с Windows, 10! Существует довольно простое решение, описанное в Perfectmobile community: Solution for eclipse with high resolution laptops. Я сделал, как описано, убедившись, что имя загруженного файла манифеста изменилось в соответствии с именем моего приложения, и это сработало просто отлично! Полезную информацию можно найти также в этом Slideshow about scaling SWT on high-resolution screens о том, как сделать ваше приложение dpiAware

+0

Сообщество Perfectmobile: решение для затмения с ноутбуками с высоким разрешением <- this links 404s – Gugg