GUI-vänligt i Eclipse

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

GUI-vänligt i Eclipse

Inlägg av 4kTRB »

Har inte skrivit en rad Java på säkert 7 år.
Men så upptäckte jag att Eclipse har ett plug-in
för att skapa GUI:sar genom att klicka och dra,
sånt fanns inte förr.

Så jag var tvungen att testa
och efter några timmar började jag få ordning på
de gamla kunskaperna både vad gäller Eclipse och Java.

Kan rekommendera detta plug-in, det sparar massor av
tid och gör det ännu roligare att fixa med GUI.

Finns bra instruktioner på bla youtube hur plug-innet installeras.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Jugge
Inlägg: 707
Blev medlem: 26 januari 2016, 08:42:42
Ort: Helsingborg

Re: GUI-vänligt i Eclipse

Inlägg av Jugge »

Ser intressant ut. Har du något namn på tillägget?
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

WindowBuilder
Egentligen hade en större skärm än min laptop passat bättre men det fungerar.

Man behöver känna till grunderna i hur man bygger upp ett fönster för att inte
det ska bli för svårt. Koden som genereras är i princip samma som man skulle
kodat själv och det är enkelt att byta namn på objekten som genereras, såsom knappar och
textrutor.
Jag adderade händelsestyrda saker på knapparna men då verkar det inte gå att testa det hela
med mer än att det i vissa fall kommer upp en ruta som talar om att händelsen blivit triggad.

När man sedan genererar en körbar .jar fil så ser man att det fungerar riktigt.
Jugge
Inlägg: 707
Blev medlem: 26 januari 2016, 08:42:42
Ort: Helsingborg

Re: GUI-vänligt i Eclipse

Inlägg av Jugge »

Tackar :)
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

Här är koden till fönstret nedan.
Vissa importer som markeras som oanvända har jag plockat bort.

Kod: Markera allt

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.BoxLayout;
import java.awt.Panel;
import javax.swing.JLabel;
import com.jgoodies.forms.factories.DefaultComponentFactory;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JInternalFrame;
import java.awt.Rectangle;
import java.awt.GridLayout;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class HelloJavaFrame extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField txtTextfltNorr;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					HelloJavaFrame frame = new HelloJavaFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public HelloJavaFrame() {
		setBackground(Color.PINK);
		setForeground(Color.PINK);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBackground(Color.PINK);
		contentPane.setForeground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
		
		Panel panel = new Panel();
		contentPane.add(panel);
		panel.setLayout(new GridLayout(0, 2, 0, 0));
		
		JLabel lblJava = DefaultComponentFactory.getInstance().createLabel("JAVA");
		lblJava.setHorizontalAlignment(SwingConstants.CENTER);
		lblJava.setForeground(Color.BLUE);
		lblJava.setFont(new Font("Tahoma", Font.BOLD, 30));
		panel.add(lblJava);
		
		JInternalFrame internalFrame = new JInternalFrame("New JInternalFrame");
		internalFrame.setBackground(Color.YELLOW);
		internalFrame.setForeground(Color.WHITE);
		internalFrame.setNormalBounds(new Rectangle(0, 0, 200, 200));
		panel.add(internalFrame);
		internalFrame.getContentPane().setLayout(new GridLayout(0, 1, 0, 0));
		
		txtTextfltNorr = new JTextField();
		txtTextfltNorr.setEditable(false);
		txtTextfltNorr.setForeground(Color.WHITE);
		txtTextfltNorr.setFont(new Font("Sitka Display", Font.BOLD, 18));
		txtTextfltNorr.setHorizontalAlignment(SwingConstants.CENTER);
		txtTextfltNorr.setText("TEXTF\u00C4LT");
		txtTextfltNorr.setBackground(Color.RED);
		internalFrame.getContentPane().add(txtTextfltNorr);
		txtTextfltNorr.setColumns(10);
		
		JButton btnNewButton = new JButton("A");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txtTextfltNorr.setText("A");	
			}
		});
		btnNewButton.setBackground(Color.WHITE);
		btnNewButton.setFont(new Font("Sitka Display", Font.PLAIN, 18));
		internalFrame.getContentPane().add(btnNewButton);
		
		JButton btnNewButton_2 = new JButton("B");
		btnNewButton_2.setBackground(Color.WHITE);
		btnNewButton_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txtTextfltNorr.setText("B");
			}
		});
		btnNewButton_2.setFont(new Font("Sitka Display", Font.PLAIN, 18));
		internalFrame.getContentPane().add(btnNewButton_2);
		
		JButton btnNewButton_1 = new JButton("C");
		btnNewButton_1.setBackground(Color.WHITE);
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txtTextfltNorr.setText("C");
			}
		});
		btnNewButton_1.setFont(new Font("Sitka Display", Font.PLAIN, 18));
		internalFrame.getContentPane().add(btnNewButton_1);
		internalFrame.setVisible(true);
	}

}

Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: GUI-vänligt i Eclipse

Inlägg av Icecap »

Ack ja - det har jag haft i många år fast med C(++) i Borland C Builder - som i grunden är en Pascal där ramverket kommer ifrån men med en C(++) kompiler inbyggd. Pascal'en hetter Delphi.

Jag är lagom imponerad...
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

Jo websidor kunde man ju bygga så här redan på -90-talet.
Men som en nyupptäckt grej är detta stort som gör det lilla extra
att man kanske vill testa.
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: GUI-vänligt i Eclipse

Inlägg av Klas-Kenny »

Lite inne på samma sak som Icecap.
Även Visual Studio har haft detta i en herrans massa år för bland annat C# och VB.

Och skulle tro att det inte är *helt* färskt i Java/Eclipse heller, för den delen. :)
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: GUI-vänligt i Eclipse

Inlägg av Icecap »

4kTRB: websidor? Röker du olagliga saker?

Jag gör EXE-filer med riktiga funktioner i form av kommunikation med portar och nätverk, filer o skit.
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

Testade att koda en SWT-applikation, tydligen något lite modernare än swing.
Enligt wiki ska det finnas i ett antal applikationer som de listar, jag fastnade för Tuxguitar...
http://www.tuxguitar.com.ar/
  • Applications (alphabetically sorted) using SWT include:
    Apache Directory Studio, an LDAP browser–editor
    Eclipse and its plug-ins
    GumTree Platform, scientific workbench
    Haystack, information manager
    IBM Rational Software products: Rational Application Developer, Rational Software Architect, Rational Team Concert and others.
    IBM Lotus software products: Notes, Sametime, Symphony, and Expeditor
    MongoChef, GUI client for MongoDB database
    RSSOwl, feed aggregator
    SmartGit, a Git, Mercurial, and Apache Subversion (SVN) client
    TuxGuitar, an open source tablature editor
    uDig, GIS tool
    Vuze, formerly named Azureus
Med hjälp av WindowBuilder så var det inte speciellt svårt att få till ett litet övnings-gui.
Största problemet var att den jre jag hade installerad inte ville exekvera .jar filen medans det
fungerade fint i Eclipse. Uppdaterade jre och då funkade det.

Den automatgenererade koden måste man möblera om i lite beroende på vad som ska utföras.
Vanligtvis lägger man alla nyskapade objekt (new object) överst men de hamnar ihop med resten av koden
för exempelvis en radioknapp. Har man då en händelsehanterare som ska utföra något med radioknappen och som
ligger tidigare i koden än konstruktionen av radioknappen så fungerar det inte.

Kod: Markera allt

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.SWT;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

public class MainWindow {
	private DataBindingContext m_bindingContext;

	protected Shell shell;
	private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
	private Button btnNewButton;
	private Button btnGin;
	private Button btnWhiskey;

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		Display display = Display.getDefault();
		Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
			@Override
			public void run() {
				try {
					MainWindow window = new MainWindow();
					window.open();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		formToolkit.setBackground(SWTResourceManager.getColor(0, 0, 205));
		shell = new Shell();
		shell.setBackground(SWTResourceManager.getColor(0, 128, 0));
		shell.setSize(650, 740);
		shell.setText("SWT Application");
		shell.setLocation(50, 0);
		
		CLabel lblNewLabel = new CLabel(shell, SWT.NONE);
		lblNewLabel.setBackground(SWTResourceManager.getColor(220, 20, 60));
		lblNewLabel.setImage(SWTResourceManager.getImage(MainWindow.class, "/org/eclipse/wb/swt/JulLogga.png"));
		lblNewLabel.setBounds(207, 23, 206, 55);
		lblNewLabel.setText("");
		
		Button btnGlgg = new Button(shell, SWT.RADIO);
		btnGlgg.setBackground(SWTResourceManager.getColor(218, 165, 32));
		btnGlgg.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
			}
		});
		btnGlgg.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLUE));
		btnGlgg.setFont(SWTResourceManager.getFont("Sitka Display", 16, SWT.BOLD | SWT.ITALIC));
		btnGlgg.setBounds(108, 141, 100, 35);
		btnGlgg.setText("Gl\u00F6gg");
		
		btnWhiskey = new Button(shell, SWT.RADIO);
		btnWhiskey.setBackground(SWTResourceManager.getColor(218, 165, 32));
		btnWhiskey.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLUE));
		btnWhiskey.setFont(SWTResourceManager.getFont("Sitka Display", 16, SWT.BOLD | SWT.ITALIC));
		btnWhiskey.setBounds(263, 141, 100, 35);
		btnWhiskey.setText("Whiskey");
		
		btnGin = new Button(shell, SWT.RADIO);
		btnGin.setBackground(SWTResourceManager.getColor(218, 165, 32));
		btnGin.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLUE));
		btnGin.setFont(SWTResourceManager.getFont("Sitka Display", 16, SWT.BOLD | SWT.ITALIC));
		btnGin.setBounds(423, 141, 100, 35);
		btnGin.setText("Gin");
		
		Label lblUtavSckagubbennskar = new Label(shell, SWT.NONE);
		lblUtavSckagubbennskar.setBackground(SWTResourceManager.getColor(0, 128, 0));
		lblUtavSckagubbennskar.setForeground(SWTResourceManager.getColor(255, 245, 238));
		lblUtavSckagubbennskar.setAlignment(SWT.CENTER);
		lblUtavSckagubbennskar.setBounds(177, 101, 273, 15);
		lblUtavSckagubbennskar.setText("UTAV S\u00C4CKAGUBBEN \u00D6NSKAR JAG....");
		
		CLabel lblNewLabel_1 = new CLabel(shell, SWT.NONE);
		
		btnNewButton = formToolkit.createButton(shell, "\u00D6nskeknappen", SWT.NONE);
		btnNewButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				boolean a = btnGlgg.getSelection();
				boolean b = btnGin.getSelection();
				boolean c = btnWhiskey.getSelection();
				if (a) {
					lblNewLabel_1.setImage(SWTResourceManager.getImage(MainWindow.class, "/org/eclipse/wb/swt/glogg.png"));
				}
				else if (b) {
					lblNewLabel_1.setImage(SWTResourceManager.getImage(MainWindow.class, "/org/eclipse/wb/swt/gin.png"));
				}
				else if (c) {
					lblNewLabel_1.setImage(SWTResourceManager.getImage(MainWindow.class, "/org/eclipse/wb/swt/famous.png"));
				}
			}
		});
		btnNewButton.setForeground(SWTResourceManager.getColor(245, 222, 179));
		btnNewButton.setFont(SWTResourceManager.getFont("Centaur", 18, SWT.BOLD | SWT.ITALIC));
		btnNewButton.setBounds(222, 205, 200, 55);
		
		
		lblNewLabel_1.setBackground(SWTResourceManager.getColor(0, 128, 128));
		lblNewLabel_1.setImage(SWTResourceManager.getImage(MainWindow.class, "/org/eclipse/wb/swt/tomte.png"));
		lblNewLabel_1.setBounds(193, 287, 268, 406);
		formToolkit.adapt(lblNewLabel_1);
		formToolkit.paintBordersFor(lblNewLabel_1);
		lblNewLabel_1.setText("");
		m_bindingContext = initDataBindings();

	}
	protected DataBindingContext initDataBindings() {
		DataBindingContext bindingContext = new DataBindingContext();
		//
		IObservableValue observeBackgroundBtnNewButtonObserveWidget = WidgetProperties.background().observe(btnNewButton);
		IObservableValue colorsbackgroundRGBFormToolkitObserveValue = PojoProperties.value("colors.background.RGB").observe(formToolkit);
		bindingContext.bindValue(observeBackgroundBtnNewButtonObserveWidget, colorsbackgroundRGBFormToolkitObserveValue, null, null);
		//
		IObservableValue observeBoundsShellObserveWidget = WidgetProperties.bounds().observe(shell);
		IObservableValue alignmentBtnNewButtonObserveValue = PojoProperties.value("alignment").observe(btnNewButton);
		bindingContext.bindValue(observeBoundsShellObserveWidget, alignmentBtnNewButtonObserveValue, null, null);
		//
		return bindingContext;
	}
}

Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av 4kTRB 17 december 2018, 03:43:28, redigerad totalt 1 gång.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: GUI-vänligt i Eclipse

Inlägg av lillahuset »

Drivs du av dödslängtan eller kommer du aldrig att komma i kontakt med en skotte?
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

Bild
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

Tog mig lite tid att fördjupa mig i det här GUI-plugin:et.

Det underlättar grymt mycket om man bara har jobbat med det en stund och vant sig.
Enda nackdelen jag ser är att konstruktorn till objekten läggs tillsammans med övrig
kod tillhörande objektet.

Det blir lite bökigt att flytta i koden om man har events som
ska jobba med objekten och de är initierade senare.

Bestämde mig för att bygga ett enkelt seriöst program som jag dessutom kan ha nytta av.
Genom att dra i slidern efter att dämpning och impedans valts så fås rätt motstånsvärden
och det är lätt att dra slidern till ett läge nära standardvärden.

I exemplen nedan har jag försökt hamna nära standardvärden och felet kommer inte bli stort.
Ska testa att bygga olika dämpsatser i LTSpice med avrundade standardvärden och se hur
mycket fel det kan bli.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

Testade med dels 2st. -6db-länkar och ett -12dB med närmaste standardvärden från exemplen ovan.
Inga stora fel och fullt användbart på hobbynivå.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
4kTRB
Inlägg: 18289
Blev medlem: 16 augusti 2009, 19:04:48

Re: GUI-vänligt i Eclipse

Inlägg av 4kTRB »

En -16dB dämpare med närmaste standardvärden.
Jag justerade slidern så R17, R20 och R23 hamnade på standardvärden
och valde de andra så nära som möjligt. -15.9dB blir det om man räknar
på spänningarna i schemat.

GUI är lite annorlunda jämfört med tomten.
Anväder shell och display att utgå ifrån.

Finns givetvis om SWT på nätet. Här är en lättläst kurs...http://www.vogella.com/tutorials/SWT/article.html

Lite av koden...men det behöver man inte tänka så mycket på om man startar
upp projektet med att välja just det swt-alternativet.

Kod: Markera allt

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Group;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.wb.swt.TFactory;
import org.eclipse.wb.swt.MyFactory;
import org.eclipse.swt.widgets.Scale;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
public class TMainWindow {	
	TNet T = new TNet();	// Ett Dämpsteg i form av ett T-Nät

	protected Shell shell;
	private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		Display display = Display.getDefault();
		Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
			@Override
			public void run() {
				try {
					TMainWindow window = new TMainWindow();
					window.open();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar