Avatar billede fear Nybegynder
22. maj 2001 - 23:33 Der er 11 kommentarer og
1 løsning

PROBLEM MED AT OPDATER ET BILLEDE I EN JLabel!!!!!!!!!!!

jeg kan ikke få opdateret et billede i en JLabel?
Første gang jeg åbner applikationen smider den fint billedet ind. Men når jeg med en JFileChooser henter et nyt billede, og vil smide det ind på JLabel vil den ikke???

(Jeg kan godt tegne billedet på Pane med
paint(Graphics g), med det er ikke det jeg vil.
Den skal ind på JLabel!!!

det er her jeg forsøger at opdater JLabel:
//******
private void openFile()
  {     
      JFileChooser fileChooser = new JFileChooser();

      fileChooser.setFileSelectionMode(
        JFileChooser.FILES_ONLY );
      int result = fileChooser.showOpenDialog( this );

      if ( result == JFileChooser.CANCEL_OPTION )
        file = null;
      else
        {
        file = fileChooser.getSelectedFile();
        gif=file.toString();
       
        opret_genstand_panel.remove(visbillede_label); 
        visbillede_label = new JLabel(new ImageIcon(gif));
//************************************



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.text.DecimalFormat;
import javax.swing.JLabel.*;

// Class Opret_genstand
public class Opret_genstand extends Frame
{
    final int MenuBarHeight = 19;

    // Component Declaration
   
    public Button luk_knap;
    public Panel opret_genstand_panel;
    public FileDialog OpenDlg1;
    public Label opret_genstand_label;
    public Label varenavn_label;
    public Label beskrivelse_label;
    public Label mindste_pris_textfield;
    public Button indsaet_billede_knap;
    public TextField varenavn_textfield;
    public TextField dkr_textfield;
    public Label dkr_label;
    public TextArea beskrivelse_textarea;
    public Button ok_knap;
    public Label help_label;
    public Label billede_help_label;
    public MenuBar MenuBar1;
    public Menu MenuBar1Filer0;
    public Menu MenuBar1V_lg_Menu1;
    public Menu MenuBar1Funktioner2;
    public Menu MenuBar1Hj_lp3;
   
    //**********************************************************
    public JLabel visbillede_label;
    private ImageIcon genstandBillede = new ImageIcon(\"Foto.gif\");

   
      // End of Component Declaration
   
        private File file;
        public Image FotoImage;
        public String gif=\"\";
     
        private int property;

    // Constructor
    public Opret_genstand()
    {
        // Frame Initialization
        setForeground(Color.black);
        setBackground(Color.lightGray);
        setFont(new Font(\"Dialog\",Font.BOLD,12));
        setTitle(\"OPRET GENSTAND\");
        setLayout(null);
        // End of Frame Initialization

        // Component Initialization
       
    //    visbillede_label.setImageIcon(new Image(Toolkit.getDefaultToolkit().createImage(\"tom.jpg\")));
       
   
        //*******************************
        luk_knap = new Button(\"LUK\");
        luk_knap.setFont(new Font(\"Dialog\",Font.BOLD,12));
        opret_genstand_panel = new Panel();
        opret_genstand_panel.setLayout(null);
        opret_genstand_panel.setForeground(Color.black);
        opret_genstand_panel.setBackground(Color.yellow);
        opret_genstand_panel.setFont(new Font(\"Dialog\",Font.BOLD,12));
        OpenDlg1 = new FileDialog(this);
        OpenDlg1.setTitle(\"Open\");
        OpenDlg1.setMode(FileDialog.LOAD);
        OpenDlg1.setDirectory(\"\");
        OpenDlg1.setFile(\"\");
        opret_genstand_label = new Label(\"OPRET GENSTAND\",Label.CENTER);
        opret_genstand_label.setFont(new Font(\"Dialog\",Font.BOLD + Font.ITALIC,20));
        varenavn_label = new Label(\"VARENAVN\",Label.LEFT);
        varenavn_label.setFont(new Font(\"Dialog\",Font.BOLD,12));
        beskrivelse_label = new Label(\"BESKRIVELSE\",Label.LEFT);
        beskrivelse_label.setFont(new Font(\"Dialog\",Font.BOLD,12));
        mindste_pris_textfield = new Label(\"MINDSTE PRIS\",Label.LEFT);
        mindste_pris_textfield.setFont(new Font(\"Dialog\",Font.BOLD,12));
        indsaet_billede_knap = new Button(\"INDSÆT BILLEDE\");
        indsaet_billede_knap.setFont(new Font(\"Dialog\",Font.BOLD,10));
        varenavn_textfield = new TextField(\"\");
        varenavn_textfield.setForeground(Color.black);
        varenavn_textfield.setBackground(Color.white);
        varenavn_textfield.setFont(new Font(\"Dialog\",Font.BOLD,12));
        dkr_textfield = new TextField(\"\");
        dkr_textfield.setForeground(Color.black);
        dkr_textfield.setBackground(Color.white);
        dkr_textfield.setFont(new Font(\"Dialog\",Font.BOLD,12));
        dkr_label = new Label(\"DKR\",Label.LEFT);
        dkr_label.setFont(new Font(\"Dialog\",Font.BOLD,12));
        beskrivelse_textarea = new TextArea(\"\");
        beskrivelse_textarea.setForeground(Color.black);
        beskrivelse_textarea.setBackground(Color.white);
        beskrivelse_textarea.setFont(new Font(\"Dialog\",Font.BOLD,12));
        ok_knap = new Button(\"OPRET\");
        ok_knap.setFont(new Font(\"Dialog\",Font.BOLD,12));
        help_label = new Label(\"Når alt er indtastet trykkes på OPRET.\",Label.CENTER);
        help_label.setFont(new Font(\"Dialog\",Font.BOLD,12));
        billede_help_label = new Label(\"(Kun hvis det ønskes)\",Label.CENTER);
        billede_help_label.setFont(new Font(\"Dialog\",Font.BOLD,12));
        MenuBar1 = new MenuBar();
        MenuBar1Filer0 = new Menu(\"Filer\");
        MenuBar1.add(MenuBar1Filer0);
        MenuBar1V_lg_Menu1 = new Menu(\"Vælg Menu\");
        MenuBar1.add(MenuBar1V_lg_Menu1);
        MenuBar1Funktioner2 = new Menu(\"Funktioner\");
        MenuBar1.add(MenuBar1Funktioner2);
        MenuBar1Hj_lp3 = new Menu(\"Hjælp\");
        MenuBar1.add(MenuBar1Hj_lp3);
        setMenuBar(MenuBar1);
       
        //*********************************************
        visbillede_label = new JLabel(genstandBillede);
        visbillede_label.setFont(new Font(\"Dialog\",Font.BOLD,12));
        // End of Component Initialization

        // Add()s
        opret_genstand_panel.add(visbillede_label);
        opret_genstand_panel.add(billede_help_label);
        add(help_label);
        add(ok_knap);
        opret_genstand_panel.add(beskrivelse_textarea);
        opret_genstand_panel.add(dkr_label);
        opret_genstand_panel.add(dkr_textfield);
        opret_genstand_panel.add(varenavn_textfield);
        opret_genstand_panel.add(indsaet_billede_knap);
        opret_genstand_panel.add(mindste_pris_textfield);
        opret_genstand_panel.add(beskrivelse_label);
        opret_genstand_panel.add(varenavn_label);
        opret_genstand_panel.add(opret_genstand_label);
        add(opret_genstand_panel);
        add(luk_knap);
        // End of Add()s
       
     
        InitialPositionSet();

        ActionListener knapAktiv = new DirectionListener();
        luk_knap.addActionListener(knapAktiv);
    }

    public void InitialPositionSet()
    {
        // InitialPositionSet()
        reshape(257,99,593,534);
        luk_knap.reshape(457,473+MenuBarHeight,114,30);
        opret_genstand_panel.reshape(12,26+MenuBarHeight,562,437);
        opret_genstand_label.reshape(145,5,256,32);
        varenavn_label.reshape(119,65,95,19);
        beskrivelse_label.reshape(120,140,118,19);
        mindste_pris_textfield.reshape(120,232,129,19);
        indsaet_billede_knap.reshape(114,308,121,30);
        varenavn_textfield.reshape(266,64,186,27);
        dkr_textfield.reshape(267,229,84,27);
        dkr_label.reshape(371,234,52,19);
        beskrivelse_textarea.reshape(266,104,188,110);
        ok_knap.reshape(333,473+MenuBarHeight,114,30);
        help_label.reshape(22,479+MenuBarHeight,305,18);
        billede_help_label.reshape(86,343,176,19);
        visbillede_label.reshape(270,285,186,131);
        // End of InitialPositionSet()
    }

    public boolean handleEvent(Event evt)
    {
        // handleEvent()
        if (evt.id == Event.WINDOW_DESTROY && evt.target == this) Opret_genstand_WindowDestroy(evt.target);
      else if (evt.id == Event.ACTION_EVENT && evt.target == indsaet_billede_knap)indsaet_billede_knap_Action(evt.target);   
 
 
     
        // End of handleEvent()

        return super.handleEvent(evt);
    }

  /**********************************************************************/
    /* tegner billeder på guien    */
    /**********************************************************************/


    public void paint(Graphics g)
    {
       
   
          //  FotoImage = Toolkit.getDefaultToolkit().getImage(gif);
           

        //  g.drawImage(FotoImage, 500,152,143,135, this);
        // End of paint()
       
       
    }
   
   
      /**********************************************************************/
    /* kalder funktionen openfile    */
    /**********************************************************************/

public void indsaet_billede_knap_Action(Object target)
      { 
           
              openFile();

      }
     
        /**********************************************************************/
    /* åbner en fil og ligger den i en variable    */
    /**********************************************************************/

   
  private void openFile()
  {     
      JFileChooser fileChooser = new JFileChooser();

      fileChooser.setFileSelectionMode(
        JFileChooser.FILES_ONLY );
      int result = fileChooser.showOpenDialog( this );

      if ( result == JFileChooser.CANCEL_OPTION )
        file = null;
      else
        {
        file = fileChooser.getSelectedFile();
        gif=file.toString();
       
        opret_genstand_panel.remove(visbillede_label); 
        visbillede_label = new JLabel(new ImageIcon(gif));
       
//            repaint();
                         
                }
     
  }
 

  // main()
  public static void main(String args[])
  {
      Opret_genstand Opret_genstand = new Opret_genstand();
      Opret_genstand.show();
  } // End of main()

    // Event Handling Routines
    public void Opret_genstand_WindowDestroy(Object target)
    {
        System.exit(0);
    }


     
        private class DirectionListener implements ActionListener
{    public void actionPerformed(ActionEvent e)
    {    Object knap = e.getSource();
        if (knap == luk_knap)
            {   
          System.exit(0);
            }

      }
}
    // End of Event Handling Routines

} // End of Class Opret_genstand

Avatar billede bearhugx Nybegynder
22. maj 2001 - 23:41 #1
Har du overvejet
updateUI() på label-objektet

/Søren
Avatar billede fear Nybegynder
22. maj 2001 - 23:47 #2
visbillede_label.updateUI();

jeg har lige prøvet det, men det hjalp ikke!!!
Avatar billede bearhugx Nybegynder
22. maj 2001 - 23:51 #3
Jeg er igang med at lave en test-applikation...
problemet er at jeg er lidt konfus omkring din kode...
Giv mig ca. 20 minuter, så skulle der være resultat :-)

/Søren Munk Skrøder
Avatar billede bearhugx Nybegynder
23. maj 2001 - 00:22 #4
Det var faktisk ret nemt....

ditBillede.setIcon( new ImageIcon(gif) );

ingen update, bare metoden setIcon( );

/Søren Munk Skrøder
Avatar billede fear Nybegynder
23. maj 2001 - 00:25 #5
jeg tester det lige, hvis det virker, er pointene dine.
Avatar billede fear Nybegynder
23. maj 2001 - 00:30 #6
jeg kan ikke lige få det til at virke.
kan du ikke klippe koden ud, og smide den her på eksperten??
Avatar billede bearhugx Nybegynder
23. maj 2001 - 00:33 #7
tjoo... here goes :-)

jeg har en anden klasse, med main metode, men det eneste den gør er at lave en ny instans af BIJL-klassen

(btw: BIJL = Billede I JLabel )

Jeg kan også maile det programmet evt.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class BIJL extends JFrame
{
    private JLabel billedet = new JLabel(\"\");
    private JButton btnPic1 = new JButton(\"pic1\");   
    private JButton btnPic2 = new JButton(\"pic2\");

    BIJL()
    {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        init();
    }
   
    private void init()
    {
        this.setTitle(\"Ændre/Update billedet i en JLabel\");
        this.setBounds(0,0,300,300);
        this.getContentPane().setLayout(null);
       
        btnPic1.addActionListener( new ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent e)
            {
                doPic1();
            }
        });

        btnPic2.addActionListener( new ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent e)
            {
                doPic2();
            }
        });
       
        billedet.setBounds(5,5, 280, 230);
        btnPic1.setBounds(5, 245, 140, 20);
        btnPic2.setBounds(150, 245, 140, 20);
        billedet.setBorder(BorderFactory.createRaisedBevelBorder());
       
       
        this.getContentPane().add(billedet, null);
        this.getContentPane().add(btnPic1, null);
        this.getContentPane().add(btnPic2, null);       
       
       
        this.setVisible(true);
    }
   
    void doPic1()
    {
        billedet.setIcon( new ImageIcon(\"elogo.gif\") );
    }
   
    void doPic2()
    {
        billedet.setIcon( new ImageIcon(\"cam_dog.gif\") );
    }
   
   
    //Overridden so we can exit on System Close
    // Guflet fra MøgBuilderen
    protected void processWindowEvent(WindowEvent e)
    {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING)
        {
            System.exit(0);
        }
    }
}

/Søren Munk Skrøder
Avatar billede fear Nybegynder
23. maj 2001 - 00:40 #8
så vidt jeg kan se. så opdater du billedet, hver gang du trykker på en af de 2 knapper!

men i mit program skal JLabel automatisk opdateres lige når jeg har valgt en ny fil fra harddisken via fileChooser?

Men prøv lige at sende programmet.
tjml@mail.dk
Avatar billede bearhugx Nybegynder
23. maj 2001 - 00:48 #9
efter
  gif=file.toString();
i metoden private void openFile()
indsætter du sætningen

  visbillede_label.setIcon( new ImageIcon(gif));


Det er, så vidt jeg kan se, det der skal til :-)

/Søren Munk Skrøder....
PS : Sender dog også lige programmet :-)

 
Avatar billede bearhugx Nybegynder
23. maj 2001 - 00:51 #10
de sidste linier :

        opret_genstand_panel.remove(visbillede_label); 
        visbillede_label = new JLabel(new ImageIcon(gif));

skal fjernes !!
/Søren Munk Skrøder
Avatar billede fear Nybegynder
23. maj 2001 - 00:54 #11
Det virker. Perfekt.
Mange Tak.


Avatar billede logical Nybegynder
23. maj 2001 - 09:35 #12
Som ekstra kommentar...

Jeg kan se, du både anvender AWT og swing komponenter. Det kan betyde på et tidspunkt, at du evt. ikke altid kan se dine komponenter, eller de forsvinder bag ved hinanden på grund af nogle fundamentale forskelle.

Bare så du ved det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester