Немного новичок в программировании, я пытаюсь написать GUI для небольшого проекта дрона, созданного на заказ. Надеюсь, я смогу заставить его отображать телеметрию / камеру и кнопки для команд. Я не хочу зайти слишком далеко, не понимая, какую структуру я должен использовать. Пока я создал составной макет с несколькими заполнителями. Я нормально использую события для кнопок и клавиш и т. Д. c, но не вижу, как легко настроить 'main l oop', который запускает каждый цикл. Например, я хочу показать секунды, прошедшие для gui / flight et c в правом нижнем углу, которые обновляются с учетом разницы между временем начала и текущим временем. Любая помощь по структуре была бы потрясающей, спасибо.
Я знаю, что макет - это rubbi sh, а некоторый импорт не нужен et c, это просто тест, чтобы получить правильную настройку для начала :)
package testGUI;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.MouseEvent;
public class TestComposite extends Composite {
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
static int elapsedSecondsGUI;
public static void main(String[] args) {
System.out.println("Working Directory = " + System.getProperty("user.dir"));
long startTimeGUI = System.currentTimeMillis();
elapsedSecondsGUI = 0;
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
TestComposite myNewGUI = new TestComposite(shell, SWT.NONE);
shell.pack();
shell.open();
display.addFilter(SWT.None, new Listener() {
@Override
public void handleEvent(Event event) {
char c = event.character;
System.out.println(c);
}
});
while (!shell.isDisposed()) {
// main loop
elapsedSecondsGUI = (int) ((System.currentTimeMillis() - startTimeGUI) / 1000);
//TestComposite.autoUpdate();
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
/**
* Create the composite.
*
* @param parent
* @param style
*/
public TestComposite(Composite parent, int style){
super(parent, style);
setLayout(null);
Group grpCurrentRawData = new Group(this, SWT.BORDER | SWT.SHADOW_ETCHED_IN);
grpCurrentRawData.setText("Current Raw Data");
grpCurrentRawData.setBounds(10, 91, 233, 251);
Label lblNewLabel_1 = new Label(grpCurrentRawData, SWT.NONE);
lblNewLabel_1.setBounds(86, 116, 70, 20);
lblNewLabel_1.setText("New Label");
Label lblGpsX = new Label(grpCurrentRawData, SWT.NONE);
lblGpsX.setBounds(10, 64, 70, 20);
lblGpsX.setText("GPS X");
Label lblGpsY = new Label(grpCurrentRawData, SWT.NONE);
lblGpsY.setBounds(10, 90, 70, 20);
lblGpsY.setText("GPS Y");
Label lblAltitude = new Label(grpCurrentRawData, SWT.NONE);
lblAltitude.setBounds(10, 116, 70, 20);
lblAltitude.setText("Altitude");
Label lblNewLabel = new Label(grpCurrentRawData, SWT.NONE);
lblNewLabel.setBounds(86, 64, 70, 20);
lblNewLabel.setText("New Label");
Label lblNewLabel_2 = new Label(grpCurrentRawData, SWT.NONE);
lblNewLabel_2.setBounds(86, 90, 70, 20);
lblNewLabel_2.setText("New Label");
Group grpMisc = new Group(this, SWT.BORDER | SWT.SHADOW_ETCHED_IN);
grpMisc.setText("Misc");
grpMisc.setBounds(10, 357, 233, 143);
Label label = new Label(grpMisc, SWT.NONE);
label.setText("New Label");
label.setBounds(109, 116, 70, 20);
Label lblLocalTime = new Label(grpMisc, SWT.NONE);
lblLocalTime.setText("Local time");
lblLocalTime.setBounds(10, 64, 70, 20);
Label lblFlightTime = new Label(grpMisc, SWT.NONE);
lblFlightTime.setText("Flight time");
lblFlightTime.setBounds(10, 90, 70, 20);
Label lblSomethingElse = new Label(grpMisc, SWT.NONE);
lblSomethingElse.setText("Something else");
lblSomethingElse.setBounds(10, 116, 70, 20);
Label label_4 = new Label(grpMisc, SWT.NONE);
label_4.setText("New Label");
label_4.setBounds(109, 64, 70, 20);
Label label_5 = new Label(grpMisc, SWT.NONE);
label_5.setText("New Label");
label_5.setBounds(109, 90, 70, 20);
Group grpBattery = new Group(this, SWT.BORDER | SWT.SHADOW_ETCHED_IN);
grpBattery.setText("Battery");
grpBattery.setBounds(10, 506, 233, 143);
Label label_1 = new Label(grpBattery, SWT.NONE);
label_1.setText("New Label");
label_1.setBounds(109, 116, 70, 20);
Label lblRemaining = new Label(grpBattery, SWT.NONE);
lblRemaining.setText("% remaining");
lblRemaining.setBounds(10, 64, 93, 20);
Label lblDischargeRate = new Label(grpBattery, SWT.NONE);
lblDischargeRate.setText("Discharge");
lblDischargeRate.setBounds(10, 90, 70, 20);
Label lblTimeRemaining = new Label(grpBattery, SWT.NONE);
lblTimeRemaining.setText("Time remaining");
lblTimeRemaining.setBounds(10, 116, 70, 20);
Label label_7 = new Label(grpBattery, SWT.NONE);
label_7.setText("New Label");
label_7.setBounds(109, 64, 70, 20);
Label label_8 = new Label(grpBattery, SWT.NONE);
label_8.setText("New Label");
label_8.setBounds(109, 90, 70, 20);
Image drone_file = new Image(getDisplay(), "src/testGUI/images/drone.jpg");
Label lblNewLabel_3 = new Label(this, SWT.NONE);
lblNewLabel_3.setBounds(283, 91, 660, 266);
formToolkit.adapt(lblNewLabel_3, true, true);
lblNewLabel_3.setText("New Label");
lblNewLabel_3.setImage(drone_file);
Canvas canvasAltitude = new Canvas(this, SWT.NONE);
canvasAltitude.setBounds(283, 395, 267, 183);
formToolkit.adapt(canvasAltitude);
formToolkit.paintBordersFor(canvasAltitude);
CLabel labelBRTime = new CLabel(this, SWT.NONE);
labelBRTime.setBounds(844, 664, 146, 26);
formToolkit.adapt(labelBRTime);
formToolkit.paintBordersFor(labelBRTime);
labelBRTime.setText("No data");
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}