Java SWT - Canvas: why delete images ?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • zildjian
    New Member
    • Oct 2007
    • 9

    #16
    Originally posted by r035198x
    javax.swing.JFr ame is swing.
    Now this is the code and I think that there is only SWT

    import java.io.IOExcep tion;

    import org.eclipse.swt .events.Selecti onAdapter;
    import org.eclipse.swt .events.Selecti onEvent;
    import org.eclipse.swt .graphics.Color ;
    import org.eclipse.swt .graphics.GC;
    import org.eclipse.swt .graphics.Image ;
    import org.eclipse.swt .graphics.Point ;
    import org.eclipse.swt .graphics.Recta ngle;
    import org.eclipse.swt .widgets.*;
    import org.eclipse.swt .*;

    public class grafica {
    Shell shell;
    Text text;
    //GC gc;
    public grafica() throws IOException, Exception {
    Menu menuBar, fileMenu, helpMenu;
    MenuItem fileMenuHeader, aboutMenuHeader ;
    MenuItem fileExitItem, aboutAboutItem;

    display = new Display();
    shell = new Shell(display);
    shell.setText(" Composer");

    menuBar = new Menu(shell, SWT.BAR);
    fileMenuHeader = new MenuItem(menuBa r, SWT.CASCADE);
    fileMenuHeader. setText("&File" );
    fileMenu = new Menu(shell, SWT.DROP_DOWN);
    fileMenuHeader. setMenu(fileMen u);

    MenuItem expertItem = new MenuItem(fileMe nu, SWT.CASCADE);
    expertItem.setT ext("&Expert");
    Menu submenu = new Menu(shell, SWT.DROP_DOWN);
    expertItem.setM enu(submenu);
    MenuItem expertParseInIt em = new MenuItem(submen u, SWT.PUSH);
    expertParseInIt em.setText("Par se Input\tCTRL+P") ;
    expertParseInIt em.setAccelerat or(SWT.CTRL + 'P');
    MenuItem dialogItem = new MenuItem(submen u, SWT.PUSH);
    dialogItem.setT ext("&Parse Output\tCTRL+O" );
    dialogItem.setA ccelerator(SWT. CTRL + 'O');
    MenuItem separator = new MenuItem(fileMe nu, SWT.SEPARATOR);

    fileExitItem = new MenuItem(fileMe nu, SWT.PUSH);
    fileExitItem.se tText("E&xit\tC TRL+C");
    fileExitItem.se tAccelerator(SW T.CTRL + 'C');

    aboutMenuHeader = new MenuItem(menuBa r, SWT.CASCADE);
    aboutMenuHeader .setText("Info" );
    helpMenu = new Menu(shell,SWT. DROP_DOWN);
    aboutMenuHeader .setMenu(helpMe nu);
    aboutAboutItem = new MenuItem(helpMe nu, SWT.PUSH);
    aboutAboutItem. setText("Info") ;

    fileExitItem.ad dSelectionListe ner(new MenuItemListene r());
    aboutAboutItem. addSelectionLis tener(new MenuItemListene r());
    expertParseInIt em.addSelection Listener(new MenuItemListene r());
    /*
    Text text1 = new Text(shell, SWT.BORDER);
    text1.setText(" Scrivi");
    text1.setBounds (50,100,300,20) ;
    text1.setTextLi mit(30);
    Text text2 = new Text(shell, SWT.NONE);
    text2.setEchoCh ar('*');
    text2.setBounds (50,150,300,20) ;
    text2.setText(" Password");
    Text text3 = new Text(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    text3.setBounds (50,190,300,100 );
    text3.setEditab le(false);
    text3.setText(" Qui non puoi scrivere");

    */
    Rectangle screen = display.getMoni tors()[0].getBounds();

    shell.setMenuBa r(menuBar);
    // Creazione ToolBar
    Image image = new Image(display," img/Parse.jpg");
    Image image2 = new Image(display," img/Help.jpg");
    //GC gc = new GC(image);
    //GC gc2 = new GC(image2);
    //gc.dispose();
    //gc2.dispose();
    ToolBar toolBar = new ToolBar(shell, SWT.NO);

    ToolItem itemParse = new ToolItem(toolBa r, SWT.PUSH);
    itemParse.setIm age(image);
    itemParse.setTe xt("Parse In");
    ToolItem itemHelp = new ToolItem(toolBa r, SWT.PUSH);
    itemHelp.setIma ge(image2);
    itemHelp.setTex t("Help");
    //itemHelp.addSel ectionListener( new ToolBarButtonLi stener());

    itemParse.addSe lectionListener (new SelectionAdapte r() {
    public void widgetSelected( SelectionEvent e2) {
    System.out.prin tln("E' stato premuto il tasto ParseIn");
    RWmidi midi = null;
    try {
    midi = new RWmidi("midi.mi d");
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTra ce();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTra ce();
    }
    Parser parser = new Parser(midi);
    String eventi = parser.getParsi ngTraccia(1);
    Shell dialog = new Shell(shell);
    dialog.setText( "Dialog");
    Text text4 = new Text(dialog, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    text4.setBounds (0,0,800,500);
    text4.setEditab le(false);
    text4.setText(e venti);
    dialog.setSize( 800, 500);
    dialog.open();
    }
    });

    itemHelp.addSel ectionListener( new SelectionAdapte r() {
    public void widgetSelected( SelectionEvent e) {
    System.out.prin tln("E' stato premuto il tasto Help");
    MessageBox aboutBox = new MessageBox(shel l,SWT.ICON_INFO RMATION);
    aboutBox.setTex t("Informazioni ");
    StringBuffer messaggio = new StringBuffer();
    messaggio.appen d("Composer Midi\n");
    messaggio.appen d("Programma sviluppato da Fedullo Carmine\n");
    messaggio.appen d("\n");
    messaggio.appen d("Per ulteriori informazioni\n" );
    messaggio.appen d("carmine82@gm ail.com\n");
    aboutBox.setMes sage(messaggio. toString());
    int buttonOK = aboutBox.open() ;
    //shell.pack();
    shell.open();
    }
    });
    toolBar.pack();

    // Creazione Separatore
    Label separatore = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL) ;
    separatore.setB ounds(0,83,1000 ,20);

    // Creazione Cavas
    Canvas canvas = new Canvas(shell, SWT.BORDER);
    canvas.setSize( 950, 500);
    canvas.setLocat ion(20, 120);

    Point size = shell.computeSi ze(-1,-1);
    shell.setBounds (0, 0, 0, 0);
    //shell.setSize(s creen.width,scr een.height-30);
    shell.setSize(1 000,700);
    shell.open();
    Color black = display.getSyst emColor(SWT.COL OR_BLACK);
    Color white = display.getSyst emColor(SWT.COL OR_WHITE);
    //canvas.setBackg round(white);
    //canvas.setBackg roundMode(2);
    gc = new GC(canvas);


    //canvas.setBackg round(white);

    gc.setBackgroun d(white);
    gc.setForegroun d(black);
    gc.fillRectangl e(0, 0, 1000, 900);

    //gc.setLineWidth (2);
    // Costruzione Pentagramma
    gc.drawLine(30, 50, 930, 50);
    //gc.drawLine(30, 60, 930, 60);
    //gc.drawLine(30, 70, 930, 70);
    //gc.drawLine(30, 80, 930, 80);
    //gc.drawLine(30, 90, 930, 90);
    costruisciPenta gramma(50,0);
    costruisciPenta gramma(120,0);
    costruisciPenta gramma(190,0);
    costruisciPenta gramma(260,0);
    costruisciPenta gramma(330,0);
    costruisciPenta gramma(400,0);
    gc.dispose();
    //canvas.redraw() ;
    // shell.pack();


    while(!shell.is Disposed())
    if(!display.rea dAndDispatch())
    display.sleep() ;
    display.dispose ();

    }
    /*
    class ToolBarButtonLi stener extends SelectionAdapte r {
    public void widgetSelected( SelectionEvent event) {
    if(event.widget .getData().)
    shell.close();
    System.exit(0);
    }
    }
    */

    public void costruisciPenta gramma(int altezza, int chiave) {
    // Chiave di Basso
    if(chiave==0) {
    Image img = new Image(display, "img/chiavebasso80.j pg");
    gc.drawImage(im g, 25, altezza-5);
    }
    gc.drawLine(30, altezza, 30, altezza+40);
    gc.drawLine(30, altezza, 930, altezza);
    gc.drawLine(30, altezza+10, 930, altezza+10);
    gc.drawLine(30, altezza+20, 930, altezza+20);
    gc.drawLine(30, altezza+30, 930, altezza+30);
    gc.drawLine(30, altezza+40, 930, altezza+40);
    gc.drawLine(300 , altezza,300 ,altezza+40);
    gc.drawLine(510 , altezza,510 ,altezza+40);
    gc.drawLine(720 , altezza,720 ,altezza+40);
    gc.drawLine(930 , altezza,930 ,altezza+40);

    }
    public void newWindow(Strin g titolo, String messaggio) {
    Shell dialog = new Shell(shell);
    dialog.setText( "Dialog");
    Text text4 = new Text(dialog, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    text4.setBounds (0,0,800,500);
    text4.setEditab le(false);
    text4.setText(" ciao provola affumicata");
    dialog.setSize( 800, 500);
    dialog.open();
    }
    class MenuItemListene r extends SelectionAdapte r {
    public void widgetSelected( SelectionEvent event) {
    if (((MenuItem) event.widget).g etText().equals ("E&xit\tCTRL+C ")) {
    shell.close();
    System.exit(0);
    }
    if (((MenuItem) event.widget).g etText().equals ("Info")) {
    MessageBox aboutBox = new MessageBox(shel l,SWT.ICON_INFO RMATION);
    aboutBox.setTex t("Informazioni ");
    StringBuffer messaggio = new StringBuffer();
    messaggio.appen d("Composer Midi\n");
    messaggio.appen d("Programma sviluppato da Fedullo Carmine\n");
    messaggio.appen d("\n");
    messaggio.appen d("Per ulteriori informazioni\n" );
    messaggio.appen d("carmine82@gm ail.com\n");
    aboutBox.setMes sage(messaggio. toString());
    int buttonOK = aboutBox.open() ;
    //shell.pack();
    shell.open();
    System.out.prin tln("premuto help");
    }
    if (((MenuItem) event.widget).g etText().equals ("Parse Input\tCTRL+P") ) {
    RWmidi midi = null;
    try {
    midi = new RWmidi("midi.mi d");
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTra ce();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTra ce();
    }
    Parser parser = new Parser(midi);
    String eventi = parser.getParsi ngTraccia(1);
    Shell dialog = new Shell(shell);
    dialog.setText( "Dialog");
    Text text4 = new Text(dialog, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    text4.setBounds (0,0,800,500);
    text4.setEditab le(false);
    text4.setText(e venti);
    dialog.setSize( 800, 500);
    dialog.open();
    }
    }
    }
    private GC gc;
    private Display display;
    }

    Comment

    • r035198x
      MVP
      • Sep 2006
      • 13225

      #17
      1.) Please use code tags everytime for posting code.
      2.) Shouldn't your class be extending Frame? What happens when you try it with SWT only?

      Comment

      • zildjian
        New Member
        • Oct 2007
        • 9

        #18
        Originally posted by r035198x
        1.) Please use code tags everytime for posting code.
        2.) Shouldn't your class be extending Frame? What happens when you try it with SWT only?
        1) Ok, sorry...I will use Code tag in the future
        2) No, I don't extend Frame Class and when I run the program it work normally but with the same problem.

        Early I write this program with swing and after I changed to SWT for this reason I forgot to delete the "extending ....." text.
        But all code is only with SWT as you can see.
        I have read various manual and tutorial about SWT, and it is not necessary to extend any class. You can use SWT widgets only importing the right packages.
        This is Hello World Exemple Code:

        Code:
        1 import org.eclipse.swt.*;
        2 import org.eclipse.swt.graphics.*;
        3 import org.eclipse.swt.widgets.*;
        
        4 public class HelloWorld {
        5 public static void main(String[] args){
        6 Display display = new Display();
        7 Shell shell = new Shell(display);
        8 shell.setText("Hello World");
        9 shell.setSize(200,100);
        10 shell.open ();
        11 while (!shell.isDisposed()) {
        12 if (!display.readAndDispatch())
        13 display.sleep ();
        14 }
        15 display.dispose ();
        16 }
        17 }
        Thank you
        Carmine

        Comment

        • JosAH
          Recognized Expert MVP
          • Mar 2007
          • 11453

          #19
          Originally posted by zildjian
          Dear Sirs,
          please can you confirm that I am using only SWT ?
          Yep, you're not using any Swing components at all. I had a look at your code
          but my SWT knowledge is minimal. I suggest that you strip your application as
          much as possible (eg. leave out the Toolbar and the Menubar etc. etc.) until
          you end up with a barebones application that either works fine (i.e. it redraws
          that image properly) or it still exhibits the same error when the image needs
          to be redrawn.

          Now it's too much code to plough through.

          kind regards,

          Jos

          Comment

          • valce
            New Member
            • Feb 2010
            • 1

            #20
            I know this thread is oooold but it was the first thread I found on Google when I had the same issue. The OP (and myself) were using the wrong way to draw on a canvas. In order to have stuff on the canvas stick around after a repaint, you should add draw functions to the a paintlistener on the canvas, e.g:

            canvas.addPaint Listener(new PaintListener() {
            public void paintControl(Pa intEvent e) {
            GC gc = new GC(c);
            drawStuff(gc);
            gc.dispose();
            }
            });

            Hopefully the next person who runs into this error and stumbles here will find it useful :)

            -C

            Comment

            Working...