Avatar billede spiritusanta Nybegynder
02. april 2006 - 15:04 Der er 3 kommentarer og
1 løsning

repaint baggrund?

Hey
Ved jeg har en række spørgsmål på eksperten som jeg nok skal få fulgt op på, men har endnu et problem, som håber nogen kan hjælpe med.

Jeg skal have opdateret baggrunden i en JApplet fra en indre lytter klasse, tænkte på at bruge repaint, men denne funktion er desværre ikke tilgængelig.. nogen der ved hvordan man så kan gøre?

Herunder koden:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;

public class form extends JApplet //implements ActionListener
{
    calc c1 = new calc();
   
    Graphics appG, husG;
    Image hus = null;
    Image applet = null;
   
    static int maxX, maxY, event = 1;
    static JPanel PContent, P1, P2;
    static JTextField T1;
    static JButton B1, B2;
     
    static ActionListener bl = new ActionListener()
    {
      public void actionPerformed (ActionEvent e) {
         
        if (e.getSource() == B1)
        {
            event = 0;
            System.out.print("Der2");
>>>>>>>>>>> HER SKAL STÅ ET ELLER ANDET DER KAN OPDATERE BAGGRUND

        }
       
        else if (e.getSource() == B2)
        {
          event = 1;
          System.out.print("Der1");
>>>>>>>>>>> HER SKAL STÅ ET ELLER ANDET DER KAN OPDATERE BAGGRUND
        }
      }
    };

    public void init()
    {   
        maxX = getBounds().width;
        maxY = getBounds().height-25;

        P2 = new JPanel(new FlowLayout());
        P2.setBackground(Color.LIGHT_GRAY);
        P2.setBorder(new TitledBorder("Kontrol Panel"));
       
        P1 = new JPanel(new FlowLayout());
        P1.setBackground(Color.LIGHT_GRAY);
        P1.setBorder(new TitledBorder("Data Panel"));
        //PContent = new JPanel(new BoxLayout(PContent, BoxLayout.Y_AXIS));
        PContent = new JPanel(new GridLayout(2,2));
        getContentPane().add(PContent, BorderLayout.NORTH);       
       
        JLabel L1 = new JLabel("Indtast afstand > ");
        L1.setForeground(Color.GREEN);
        P1.add(L1);
       
        T1 = new JTextField("0",11);
        P1.add(T1);
       
        B1 = new JButton("Omregn til km");
        B2 = new JButton("Omregn til miles");
        P2.add(B1);
        B1.addActionListener(bl);
        P2.add(B2);
        B2.addActionListener(bl);
       
        PContent.add(P1);
        PContent.add(P2);
      }
   
      public void paint(Graphics g) {   
           
        PContent.repaint();
        //super.paint(g);
        int x = 130;
        g.setColor(Color.LIGHT_GRAY);
        g.fillRect(0,25,maxX, maxY);
        g.setColor(Color.white);
        g.fillRect(35,x,210,40);
        g.setColor(Color.BLACK);
       
        if (event == 1) {
          g.drawString(T1.getText() + " miles omregnet til",35,x+15);
          g.drawString((int)(100 * c1.mile2km(Double.parseDouble(T1.getText()))) / 100.0 + " kilometer", 35,x+30);
        }
        else if(event == 0)
        {
            g.drawString(T1.getText() + " km omregnet til",35,x+15);
            g.drawString((int)(100 * c1.km2mile(Double.parseDouble((T1.getText())))) / 100.0 + " miles",35,x+30);
        }
      }
}
Avatar billede mikkelbm Nybegynder
02. april 2006 - 15:51 #1
Der burde ikke være problemer i at kalde repaint i en anonym klasse - du må bare ikke bruge this.repaint();

Men bare:

repaint();

Burde virke fint.
Avatar billede mikkelbm Nybegynder
02. april 2006 - 15:53 #2
Ahh... Ser lige at det er en statisk variable du har lavet. Det dur ikke, da den kan tilgås uden at der er oprettet en instans af din form-klasse.
Avatar billede mikkelbm Nybegynder
02. april 2006 - 15:57 #3
Gør det til en private class i stedet:

    private class MyActionListener implements ActionListener
    {
      public void actionPerformed (ActionEvent e) {
         
        if (e.getSource() == B1)
        {
            event = 0;
            System.out.print("Der2");
            repaint();

        }
       
        else if (e.getSource() == B2)
        {
          event = 1;
          System.out.print("Der1");
          repaint();
        }
      }
    }

Og i din init:

...
ActionListener listener = new MyActionListener();
B1.addActionListener(listener);
P2.add(B2);
B2.addActionListener(listener);

...
Avatar billede spiritusanta Nybegynder
02. april 2006 - 16:16 #4
Mange tak det virker
hehe alt den tid jeg har siddet og kæmpet med det nu :)
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