tobias_petry
Erfahrenes Mitglied
Hallo,
auf Grund der Vorzüge des nativen Aussehens von SWT wollte ich mich da mal reinarbeiten, nun stehe ich nur von nem Problem was ich nicht verstehe.
Ich erzeuge einen Tab-Folder, der 3 TabItems hat, jedes TabItem bekommt mit setControl() eine Instanz der Group-Klasse zugewiesen, nun ist es aber so, dass er in jedem Tab Freiraum nach dem Group lässt, wo die anderen Tabs hinein passen würde
hier mal der Code, falls es hilft:
Der Code ist leider etwas unübersichtlich, und nicht zu schön wie vom Eclipse Gui-Builder (der bei mir bei SWT versagt).
Im Grunde erstellt die Methode createGUI() den TabFolder inkl. aller Tabs und ruft dann die privaten Methoden initializeAllgemeinTab() und initializeProxyTab() auf, die die Tabs mit Inhalt füllen sollen.
Wo wir gleich beim Thema sind, wollt eich noch Fragen, wie das mit dem disposen aussieht, muss ich jedes Widget/Composite einzeln disposen oder reicht es eigentlich auch einen Composite (meist die shell) zu disposen, da die ja alle ihre Widgets und Composites kennt.
auf Grund der Vorzüge des nativen Aussehens von SWT wollte ich mich da mal reinarbeiten, nun stehe ich nur von nem Problem was ich nicht verstehe.
Ich erzeuge einen Tab-Folder, der 3 TabItems hat, jedes TabItem bekommt mit setControl() eine Instanz der Group-Klasse zugewiesen, nun ist es aber so, dass er in jedem Tab Freiraum nach dem Group lässt, wo die anderen Tabs hinein passen würde

hier mal der Code, falls es hilft:
Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class EinstellungenGUI {
private Display display;
private Shell shell;
public void initialize() {
this.display = new Display();
this.shell = new Shell(this.display);
this.shell.setText("Einstellungen");
this.createGUI();
this.shell.pack();
this.shell.open();
while (!this.shell.isDisposed()) {
if (!this.display.readAndDispatch())
this.display.sleep();
}
this.display.dispose();
}
private void createGUI() {
//Layout festlegen
shell.setLayout(new GridLayout());
//TabFolder erstellen
TabFolder tabFolder = new TabFolder (shell, SWT.NONE);
//EinstellungenTab erstellen
TabItem tabAllgemein = new TabItem (tabFolder, SWT.NONE);
tabAllgemein.setText("Allgemein");
this.initializeAllgemeinTab(tabFolder,tabAllgemein);
//ProxyTab erstellen
TabItem tabProxy = new TabItem (tabFolder, SWT.NONE);
tabProxy.setText("Proxy");
this.initializeProxyTab(tabFolder,tabProxy);
//PostTab erstellen
TabItem tabPost = new TabItem (tabFolder, SWT.NONE);
tabPost.setText("POST");
this.initializePostTab(tabFolder,tabPost);
tabFolder.pack ();
}
private void initializeAllgemeinTab(TabFolder folder,TabItem tab){
folder.setLayout(new GridLayout());
//AllgemeinGroup erstellen
Group groupEinstellungen=new Group(folder,SWT.NONE);
groupEinstellungen.setText("Allgemein");
GridLayout layoutAllgemein=new GridLayout();
layoutAllgemein.numColumns=2;
groupEinstellungen.setLayout(layoutAllgemein);
tab.setControl(groupEinstellungen);
//Inhalt des Group erstellen
Label labelURL=new Label(groupEinstellungen,SWT.NONE);
labelURL.setText("URL: ");
Text textURL=new Text(groupEinstellungen,SWT.BORDER);
textURL.setText("http//localhost/slots/game.php");
Label labelThreads=new Label(groupEinstellungen,SWT.NONE);
labelThreads.setText("Threads: ");
Spinner spinnerThreads=new Spinner(groupEinstellungen,SWT.BORDER);
spinnerThreads.setMinimum(1);
spinnerThreads.setMaximum(999);
spinnerThreads.setSelection(10);
Label labelWartezeit=new Label(groupEinstellungen,SWT.NONE);
labelWartezeit.setText("Wartezeit: ");
Spinner spinnerWartezeit=new Spinner(groupEinstellungen,SWT.BORDER);
spinnerWartezeit.setMinimum(0);
spinnerWartezeit.setMaximum(300);
spinnerWartezeit.setSelection(1);
Label labelRequest=new Label(groupEinstellungen,SWT.NONE);
labelRequest.setText("Request: ");
Combo comboRequest=new Combo(groupEinstellungen, SWT.READ_ONLY);
comboRequest.add("GET",0);
comboRequest.add("POST",1);
comboRequest.select(0);
Label labelAnzahl=new Label(groupEinstellungen,SWT.NONE);
labelAnzahl.setText("Anzahl: ");
Spinner spinnerAnzahl=new Spinner(groupEinstellungen,SWT.BORDER);
spinnerAnzahl.setMinimum(-1);
spinnerAnzahl.setMaximum(100000);
spinnerAnzahl.setSelection(500);
groupEinstellungen.pack();
}
private void initializeProxyTab(TabFolder folder,TabItem tab){
//ProxyGroup erstellen
Group groupProxy=new Group(folder,SWT.NONE);
groupProxy.setText("Proxy");
GridLayout layoutProxy=new GridLayout();
layoutProxy.numColumns=2;
groupProxy.setLayout(layoutProxy);
tab.setControl(groupProxy);
//Inhalt des Group erstellen
Label labelProxy=new Label(groupProxy,SWT.NONE);
labelProxy.setText("Proxy: ");
Button buttonProxy=new Button(groupProxy,SWT.CHECK);
Label labelProxyhost=new Label(groupProxy,SWT.NONE);
labelProxyhost.setText("Host: ");
Text textProxyhost=new Text(groupProxy,SWT.BORDER);
textProxyhost.setText("hts-srv02");
Label labelProxyport=new Label(groupProxy,SWT.NONE);
labelProxyport.setText("Port: ");
Text textProxyport=new Text(groupProxy,SWT.BORDER);
textProxyport.setText("8080");
Label labelProxyauth=new Label(groupProxy,SWT.NONE);
labelProxyauth.setText("ProxyAuth: ");
Button buttonProxyauth=new Button(groupProxy,SWT.CHECK);
Label labelProxyuser=new Label(groupProxy,SWT.NONE);
labelProxyuser.setText("ProxyUser: ");
Text textProxyuser=new Text(groupProxy,SWT.BORDER);
textProxyuser.setText("r1103");
Label labelProxypass=new Label(groupProxy,SWT.NONE);
labelProxypass.setText("ProxyPass: ");
Text textProxypass=new Text(groupProxy,SWT.BORDER|SWT.PASSWORD);
textProxypass.setText("r1103");
groupProxy.pack();
}
private void initializePostTab(TabFolder folder,TabItem tab){
Button button1 = new Button (folder, SWT.PUSH);
button1.setText ("post");
tab.setControl (button1);
}
public static void main(String args[]) {
EinstellungenGUI gui = new EinstellungenGUI();
gui.initialize();
}
}
Der Code ist leider etwas unübersichtlich, und nicht zu schön wie vom Eclipse Gui-Builder (der bei mir bei SWT versagt).
Im Grunde erstellt die Methode createGUI() den TabFolder inkl. aller Tabs und ruft dann die privaten Methoden initializeAllgemeinTab() und initializeProxyTab() auf, die die Tabs mit Inhalt füllen sollen.
Wo wir gleich beim Thema sind, wollt eich noch Fragen, wie das mit dem disposen aussieht, muss ich jedes Widget/Composite einzeln disposen oder reicht es eigentlich auch einen Composite (meist die shell) zu disposen, da die ja alle ihre Widgets und Composites kennt.
Zuletzt bearbeitet: