Hi,
ich will in Jave ein Programm zum darstellen einiger Daten als diagramm schreiben, habe aber das Problem, das die zum Graphen gehörige Legende erst bei einem maximieren bzw. einer Änderung der Größe der Shell angezeigt wird.
hier wird die legende erzeugt, bei welcher man die farbe der einzelnen Graphen verändern kann. Aus einer Datenmenge entstehen immer 2 Graphen
aufgerufen wird das ganze hier:
diese Funktione wird gerade noch bei jeder aktion die mit der Gui zu tun hat aufgerufen, also sehr oft, trotzdem wird der Legendeneintrag erst nach einem ändern der Größe angezeigt. das er da ist ist sicher, da ich aus den Canvas-Objekten über die hintergrundfarbe die Farbe der Graphen setzte, sonst würde es einen Nullpointer geben.
Hat einer ne ahnung was z.B. bei der shell.setMaximized(true); aufgerufen, was ich vergessen habe?
Grüße Ischterai
ich will in Jave ein Programm zum darstellen einiger Daten als diagramm schreiben, habe aber das Problem, das die zum Graphen gehörige Legende erst bei einem maximieren bzw. einer Änderung der Größe der Shell angezeigt wird.
hier wird die legende erzeugt, bei welcher man die farbe der einzelnen Graphen verändern kann. Aus einer Datenmenge entstehen immer 2 Graphen
Code:
public void addLegend( final int position){
//Layout und Data
GridData legenddata = new GridData(GridData.FILL_HORIZONTAL);
legenddata.horizontalAlignment = SWT.FILL;
legenddata.horizontalSpan = 1;
GridLayout grouplayout = new GridLayout();
grouplayout.numColumns = 4;
Group group = new Group(legendparent, SWT.NONE);
group.setLayoutData(legenddata);
group.setLayout(grouplayout);
Label cost = new Label(group, SWT.NONE);
cost.setText("Kosten");
GridLayout gridlayout = new GridLayout();
GridData griddata = new GridData(GridData.FILL_HORIZONTAL);
Canvas costColorlocal = new Canvas(group, SWT.FILL);
costColorlocal.setBackground(display.getSystemColor(this.getcolorcount()));//liefert wert zwischen 3 und 15
costColorlocal.setLayout(gridlayout);
costColorlocal.setLayoutData(griddata);
this.costColor.add(costColorlocal);// list mit Canvas
Button costButton = new Button(group, SWT.NONE);
costButton.setText("...");
costButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ColorDialog cd = new ColorDialog(parentShell);
cd.setText("ColorDialog ");
cd.setRGB(new RGB(255, 255, 255));
costColor.get(position).setBackground(new Color(display, cd.open()));
updateGUI();
}
});
GridData labelgriddata = new GridData();
labelgriddata.verticalSpan = 2;
Label thema = new Label(group, SWT.NONE);
String s= daten.get(position).getName();
for(int i=20; i<s.length(); i+=20){
StringBuilder sb = new StringBuilder();
sb.append(s.substring(0, i));
sb.append("\n");
sb.append(s.substring(i));
s=sb.toString();
}
thema.setText(s);
thema.setLayoutData(labelgriddata);
Label benefit = new Label(group, SWT.NONE);
benefit.setText("Nutzen");
Canvas benefitColorlocal = new Canvas(group, SWT.CENTER);
benefitColorlocal.setBackground(display.getSystemColor(this.getcolorcount()));
benefitColorlocal.setLayout(gridlayout);
benefitColorlocal.setLayoutData(griddata);
this.benefitColor.add(benefitColorlocal);
Button benefitButton = new Button(group, SWT.NONE);
benefitButton.setText("...");
benefitButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ColorDialog cd = new ColorDialog(parentShell);
cd.setText("ColorDialog Demo");
cd.setRGB(new RGB(255, 255, 255));
benefitColor.get(position).setBackground(new Color(display, cd.open()));
updateGUI();
}
});
this.legendgroup.add(group); // liste zum abspeichern der Group
}
aufgerufen wird das ganze hier:
Code:
public void updateGUI(){
//Legende erzeugen
if(this.daten.size()>this.legendgroup.size()){
for(int i=this.legendgroup.size(); i<workshops.size(); i++){
this.addLegend( i);
}
}
canvas.redraw(); // Graphen neu zeichnen
}
diese Funktione wird gerade noch bei jeder aktion die mit der Gui zu tun hat aufgerufen, also sehr oft, trotzdem wird der Legendeneintrag erst nach einem ändern der Größe angezeigt. das er da ist ist sicher, da ich aus den Canvas-Objekten über die hintergrundfarbe die Farbe der Graphen setzte, sonst würde es einen Nullpointer geben.
Hat einer ne ahnung was z.B. bei der shell.setMaximized(true); aufgerufen, was ich vergessen habe?
Grüße Ischterai