Avatar billede pnr Nybegynder
31. marts 2003 - 10:27 Der er 11 kommentarer og
2 løsninger

Teksten i GUI bliver sat for sent!

Jeg har en GUI hvorman kan lave en søgning som tager list tid, så derfor vil jeg gerne fortælle brugeren at der bliver søgt. Jeg har derfor lavet en linie i bunden af siden hvor jeg vil skrive at der søges, Derfor sætter jeg værdien i det tekstfelt inden jeg kalder søge metoden, men tekstfeltet bliver først sat efter søgningen er fuldført.

if(com.equals(FindGUI.SOEG) || com.equals(FindGUI.NR)){
    view.setInfolinieOutput("SØGER");           
    // HER SØGES   

          view.setInfolinieOutput("");
}
Avatar billede soreno Praktikant
31. marts 2003 - 10:32 #1
view.setInfolinieOutput("SØGER");         
repaint();
    // HER SØGES
Avatar billede soreno Praktikant
31. marts 2003 - 10:34 #2
Eller kør søgningen i en seperat tråd.
Avatar billede arne_v Ekspert
31. marts 2003 - 10:38 #3
Hvis det skal være rigtigt fancy bruger du JProgessBar !
Avatar billede soreno Praktikant
31. marts 2003 - 10:45 #4
Eksempel på tråd..

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

public class TestKlasseSwing extends JFrame implements ActionListener, WindowListener, Runnable
{
    private int frameWidth = 640;
    private int frameHeight = 480;
    private JScrollPane scrollPane;
    private JTextArea textArea;
    private JButton button;
    private Thread thread;
   
    public TestKlasseSwing()
    {
        createFrame();
    }

    private void createFrame()
    {
        setTitle("TestKlasseSwing");
        addWindowListener(this);

        //components       
        textArea = new JTextArea();
        scrollPane = new JScrollPane(textArea);
        this.getContentPane().add(scrollPane, BorderLayout.CENTER);

        button = new JButton("Beregn");
        button.addActionListener(this);
        this.getContentPane().add(button, BorderLayout.SOUTH);
       
        //Center Frame
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new java.awt.Dimension(frameWidth, frameHeight));
        setLocation( (screenSize.width-this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2);
    }

    public void run()
    {
        textArea.append("Beregner - vent et øjeblik..\n");
        try
        {
            for(int i=0;i<10;i++)
            {           
                Thread.sleep(300);
                textArea.append("*");
            }
        }
        catch(InterruptedException e)
        {
            e.printStackTrace();
        }
        textArea.append("\nBeregning er færdiggjort..\n");
    }

    public void windowOpened(WindowEvent e){}
    public void windowClosing(WindowEvent e){ dispose(); System.exit(0);}
    public void windowClosed(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}

    public void actionPerformed(ActionEvent e)
    {
        thread = new Thread(this);
        thread.start();
    }
}

class Main
{
    public static void main(String args[])
    {
        new TestKlasseSwing().show();
    }
}
Avatar billede pnr Nybegynder
31. marts 2003 - 10:50 #5
Den repaint ting virker ikke
Avatar billede soreno Praktikant
31. marts 2003 - 11:00 #6
SÅ kan du bruge .paintImmediately(..)
F.eks.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestKlasseSwing extends JFrame implements ActionListener, WindowListener
{
    private int frameWidth = 640;
    private int frameHeight = 480;
    private JScrollPane scrollPane;
    private JTextArea textArea;
    private JButton button;
    private Thread thread;
   
    public TestKlasseSwing()
    {
        createFrame();
    }

    private void createFrame()
    {
        setTitle("TestKlasseSwing");
        addWindowListener(this);

        //components       
        textArea = new JTextArea();
        scrollPane = new JScrollPane(textArea);
        this.getContentPane().add(scrollPane, BorderLayout.CENTER);

        button = new JButton("Beregn");
        button.addActionListener(this);
        this.getContentPane().add(button, BorderLayout.SOUTH);
               
        //Center Frame
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new java.awt.Dimension(frameWidth, frameHeight));
        setLocation( (screenSize.width-this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2);
    }

    public void windowOpened(WindowEvent e){}
    public void windowClosing(WindowEvent e){ dispose(); System.exit(0);}
    public void windowClosed(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}

    public void actionPerformed(ActionEvent e)
    {
        try
        {
            textArea.append("Beregner - vent et øjeblik..\n");
            scrollPane.paintImmediately(scrollPane.getBounds());
            Thread.sleep(2000);
            textArea.append("\nBeregning er færdiggjort..\n");
        }
        catch(InterruptedException ex)
        {
            ex.printStackTrace();
        }
    }
}

class Main
{
    public static void main(String args[])
    {
        new TestKlasseSwing().show();
    }
}
Avatar billede pnr Nybegynder
31. marts 2003 - 11:19 #7
Hvordan bruger jeg paintImmediately(..); på mit JTextField?
Avatar billede soreno Praktikant
31. marts 2003 - 11:21 #8
JTextField jtf = new JTextField("Hello world");
jtf.paintImmediately(jtf.getBounds());
Avatar billede pnr Nybegynder
31. marts 2003 - 11:31 #9
Det virker stadig ikke
Avatar billede soreno Praktikant
31. marts 2003 - 11:36 #10
Så post din kode så vi kan se hvad du har lavet..
Avatar billede pnr Nybegynder
31. marts 2003 - 11:42 #11
public void setInfolinieOutput(String text, int farve) {
    info.setText(text.toUpperCase());//alt i infolinien står med stort!
    if(farve==0)
    info.setForeground(Color.black);
    else if(farve==1)
    info.setForeground(Color.red);
       
    info.paintImmediately(info.getBounds());   
}
Avatar billede _carsten Nybegynder
31. marts 2003 - 12:36 #12
Kan din kode overhovedet kompileres, du kalder
              view.setInfolinieOutput("SØGER"); // MED ET ARGUMENT

i følge din kommentar 11:42:49 tager den 2 argumenter, men hvis vi går ud fra at du har fod på det punkt, så indsæt følgende linie - det virker.

    super.paint(getGraphics());

if(com.equals(FindGUI.SOEG) || com.equals(FindGUI.NR)){
    view.setInfolinieOutput("SØGER");
    super.paint(getGraphics()); // INDSÆT DENNE LINIE, SÅ VIRKER DET !!!
    // HER SØGES   

          view.setInfolinieOutput("");
}
Avatar billede pnr Nybegynder
31. marts 2003 - 12:44 #13
Det var jo bare det jeg ville vide :-)
jeg takker!
også en stor tak til dig soreno !!
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