Eclipse - dodawanie bibliotek SWT XY Graph do projektu

0

Dzień dobry.

Chciałbym dodać do swojego projektu biblioteki stąd:
https://www.eclipse.org/nebula/widgets/visualization/html/GettingStarted.html
Mam pobranego takiego Eclipsa:
Version: 2020-06 (4.16.0)

Punkt 1.1 mam zrobiony ale w punkcie 1.2 jest tak:

**1.2 Install Pure Java Version
For pure java applications, add org.csstudio.swt.xygraph.jar to your project build path. It also requires following jar files:

org.eclipse.draw2d.jar
org.eclipse.swt.jar
org.eclipse.swt.win32.win32.x86.jar or other equivalent platform swt library
org.eclipse.jface.jar
org.eclipse.core.commands.jar
org.eclipse.equinox.common.jar
org.eclipse.osgi.jar**

Skąd mam wziąć plik org.csstudio.swt.xygraph.jar?

1

SWT to starszy staroć i straszna mordęga. jarów z jakiegoś powodu nie ma w maven repository lub są stare. W rezultacie zawsze trzeba kombinować.
Możesz np ściągnąć kod z githuba i próbować skompilować

0

KamilAdam dzięki za odpowiedź.
Otwieram link od Ciebie i mam kilka plików (examples images itd.) który mam pobrać? (Jestem początkujący)

1

Czyli nie umiesz używać gita/githuba. Lepiej sobie odpuść lub użyj Swinga zamiast SWT bo to będzie naprawę ciężkie

Ale jeśli już musisz to musisz pobrać to repozytorium, albo za pomocą gita (gic clone https://github.com/ControlSystemStudio/cs-studio.git), albo jako zip. Potem musisz skompilować projekt za pomocą maven (mvn clean install) i w odpowiednim folderze target będziesz miał zbudowaną boibliotekę

0

Zasadniczo to po prostu chciałbym użyć jakiejkolwiek biblioteki do rysowania wykresów i widgetów typu Gauge, Knob, meter itp.
Znalazłem akurat to z pierwszego linka, który tu zamieściłem. Nie musi to być SWT. Wybrałem go bo zauważyłem, że ktoś w internecie zrobił opis jak dodać biblioteki itd.
Czyli o ile dobrze rozumiem istnieją widgety pod SWINGA które można w łatwy sposób dodać do projektu?

3

Użyj sobie javaFX jest nowsze i ma jakieś gauge:
screenshot-20200731102202.png

2
NordicWalking napisał(a):

... Nie musi to być SWT. ...
Czyli o ile dobrze rozumiem istnieją widgety pod SWINGA które można w łatwy sposób dodać do projektu?

Istnieją, istnieją. Swing wypadł z pierwszej ligi, bo się przechodzi na web, ale to dobry framework.
SWT (baza ówczesnego Eclipse) był całkiem OK frameworkiem, z natywnymi kontrolkami (wymagał zwalniania wszystkich zasobów), w onym czasie był szybszy do Swinga, używałem, ale to już przeszłość. Nawet nie jest dla mnie jasne, czy i ewentualnie co zrobili na czasy 64 bit. Kod javowski przez laaata przyśpieszył, a punkty styku ze środowiskiem natywnym stały się hamulcami.

javafxdev napisał(a):

Użyj sobie javaFX jest nowsze i ma jakieś gauge:

FX jest atrakcyjny wizualnie, to fakt.
Dla mnie nie na tyle, aby go wybrać:

  • programowanie w XML (Swinga się koduje w Javie)
  • w zamiarach miał zastąpić Swinga, ale szybciej od niego zszedł w jeszcze węższą niszę.
0

@AnyKtokolwiek: Skonfigurowałem sobie środowisko i pierwszy projekt zgodnie z tym:

Super wprowadzenie. Dzięki za wskazówkę właśnie tego szukałem :-)
Potrzebuję jeszcze jednej wskazówki, aby wystartować z tym.

Wrzuciłem sobie progressbara ręcznie poprzez Scene buildera i chciałbym zrobić jakiegokolwiek callbacka od niego. Gdy robiłem taką samą czynność w Eclipsie, to po umieszczeniu buttona czy progressbara pojawiał się od razu w kodzie w klasie głównej automatycznie jako np:

ProgressBar prog_bar;

natomiast tu tak nie ma. A jeśli próbuje dopisać kod samemu to środowisko nie może skojarzyć mojego progresbara dodanego ze Scene bulidera z tym zdeklarowanym w klasie głównej.
Jak je ze sobą powiązać?

import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class Main extends Application {

@FXML ProgressBar prog_bar;

    @Override
    public void start(Stage stage) throws Exception {

//        prog_bar.setProgress(2);

        Pane mainPane = FXMLLoader.load(getClass().getResource("/MainView.fxml"));
        Scene scene = new Scene(mainPane);
        stage.setScene(scene);
        stage.setTitle("abcd");
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
0
NordicWalking napisał(a):

Wrzuciłem sobie progressbara ręcznie poprzez Scene buildera i chciałbym zrobić jakiegokolwiek callbacka od niego. Gdy robiłem taką samą czynność w Eclipsie, to po umieszczeniu buttona czy progressbara pojawiał się od razu w kodzie w klasie głównej automatycznie jako np:

ProgressBar prog_bar;

natomiast tu tak nie ma. A jeśli próbuje dopisać kod samemu to środowisko nie może skojarzyć mojego progresbara dodanego ze Scene bulidera z tym zdeklarowanym w klasie głównej.
Jak je ze sobą powiązać?

W FXML musisz ustawić znacznik fx:id w SceneBuilderze w prawym panelu chyba w ostatniej sekcji jest to do ustawienia, nazwa pola z klasy musi się pokrywać z ID z FXML.

0

Zrobiłem tak, ale nic się nie zmienia. to jest fragment z MainView.fxml i jak widac progressbar ma ID: prog_bar

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#dcdcdc" height="200.0" layoutX="10.0" layoutY="14.0" stroke="BLACK" strokeType="INSIDE" width="185.0" />
      <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#d4d4d4" height="183.0" layoutX="129.0" layoutY="24.0" stroke="BLACK" strokeType="INSIDE" width="56.0" />
      <Label layoutX="25.0" layoutY="21.0" text="Lampa numer 1" />
      <Slider layoutX="150.0" layoutY="30.0" orientation="VERTICAL" />
      <RadioButton layoutX="40.0" layoutY="45.0" mnemonicParsing="false" text="ON" />
      <RadioButton layoutX="39.0" layoutY="73.0" mnemonicParsing="false" text="OFF" />
      <Label layoutX="143.0" layoutY="183.0" text="MOC" />
      <ImageView fx:id="obrazek" fitHeight="76.0" fitWidth="71.0" layoutX="44.0" layoutY="100.0" pickOnBounds="true" preserveRatio="true" />
      <ProgressBar fx:id="prog_bar" layoutX="19.0" layoutY="183.0" prefHeight="18.0" prefWidth="95.0" progress="0.0" />
   </children>
</Pane>

dalej robię tak:

@FXML ProgressBar progressBar;

    @Override
    public void start(Stage stage) throws Exception {

        progressBar.setProgress(0.2);
        
        Pane mainPane = FXMLLoader.load(getClass().getResource("/MainView.fxml"));
        Scene scene = new Scene(mainPane);
        stage.setScene(scene);
        stage.setTitle("abcd");
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);

    }
}

A nie powinno się dodać tego progressbara do obiektu "stage" klasy Stage?
Ale z drugiej strony jak go dodam to pojawia mi się kolejny nowy.

0

Znalazłem jeszcze taki przykład:

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class MainController implements Initializable {

	@FXML
	private TextField textField;

	@FXML
	private Button button;

	@FXML
	private Label label;

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		button.setOnAction(e -> label.setText(String.format("Cześć %s", textField.getText())));
	}

}

czyli klasa kontrolująca, implementująca Initializable.

a czy w ogóle takie wyrażenie:

@FXML public ProgressBar progressBar;

a dokładnie @FXML daje jednoznacznie dostęp do ProgressBara który wrzuciłem za pomocą Scene buildera?

0
NordicWalking napisał(a):

a czy w ogóle takie wyrażenie:

@FXML public ProgressBar progressBar;

a dokładnie @FXML daje jednoznacznie dostęp do ProgressBara który wrzuciłem za pomocą Scene buildera?

Tak, jeżeli nazwa pola z klasy pokrywa się z ID z FXML oraz klasa jest ustawiona jako kontroler w FXML to powinno być git. Budujesz to jakimś Mavenem? Może wrzuć to na GitHuba i zerknę w wolnej chwili.

1 użytkowników online, w tym zalogowanych: 0, gości: 1