Avatar billede supa Nybegynder
04. marts 2005 - 13:22 Der er 10 kommentarer og
1 løsning

Usynlig .visible

Hejsa,

Jeg har et lille problem med en af mine knapper.. Det er sådan at når den er placret, så vises den ikke, men kører jeg musen hen over den, så kommer den til syne, hvordan kan det være..?
Avatar billede di8leva Nybegynder
04. marts 2005 - 13:28 #1
Det er nok omuligt at sige uden at se koden...
Avatar billede supa Nybegynder
04. marts 2005 - 13:40 #2
Det bliver kun et lille udsnit af koden, da jeg tvivler at nogen gider at se 1200 linjers kode igennem for fejl..
Avatar billede di8leva Nybegynder
04. marts 2005 - 13:45 #3
prøv, så får vi se

det vigtige er hvordan du tilføjer knappen til din panel/frame sammen med hvordan du tilføjer de andre komponenterne
Avatar billede supa Nybegynder
04. marts 2005 - 13:46 #4
public class GuiDialog extends JFrame implements ActionListener, KeyListener{
    private JButton copyLevelOk, missingLevelYes, missingLevelNo, cancel, selectFurnitureOk, saved, exitSave, exitCancel, exitExit;
    private JLabel label1, label2, label3;
    private JProgressBar progressBar;
    private Controller controller;
    private SaveThread saveProgress;
    private Container content = this.getContentPane();

    public GuiDialog(Controller controller){
        this.controller = controller;
        this.screenSizeX = controller.getScreenSizeX();
        this.screenSizeY = controller.getScreenSizeY();
       
        content.setVisible(false);
        this.cancel = new JButton("Annuller");
        this.cancel.setFont(Controller.BUTTON);
        this.cancel.addActionListener(this);
        saveProgress = new SaveThread();
    }

    public void save(){
        saveProgress = new SaveThread(controller);
        label1 = new JLabel("Gemmer data");

        if(saved != null){
            saved.setVisible(false);
        }
       
        this.progressBar = saveProgress.getProgressBar();
        this.progressBar.setValue(0);
        this.progressBar.setStringPainted(true);
        this.progressBar.setIndeterminate(false);
        this.progressBar.setVisible(true);
       
        label1.setFont(Controller.LABEL);

        int dialogSizeX = 200, dialogSizeY = 200;
        this.setSize(dialogSizeX, dialogSizeY);
        this.setLocation((screenSizeX - dialogSizeX) /2, (screenSizeY - dialogSizeY) / 2);
       
        content.setLayout(null);
        content.add(label1);
        content.add(progressBar);
       
        label1.setBounds(10, 5, 180, 20);
        this.progressBar.setBounds(10, 35, 170, 20);
       
        label1.setHorizontalAlignment(JLabel.CENTER);
       
        this.setVisible(true);
        content.setVisible(true);
       
        saveProgress.start();
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == saved){
            if(quit){
                exit();
            }
            content.remove(saved);
            content.remove(label1);
            content.remove(progressBar);
            dispose();
        }
    }

    public void savedData(){
        progressBar.setVisible(false);
        saved = new JButton("Ok");
        saved.setFont(Controller.BUTTON);
        saved.setBounds(10, 40, 170, 20);
        saved.addActionListener(this);
        content.add(saved);
        saved.setVisible(true);
        label1.setText("Data gemt");
    }
}

public class SaveThread extends Thread{
    private boolean running, statusChanged;
    private Controller controller;
    private JProgressBar progressBar;
    private int length = 0;
    private int value = 0;

    public SaveThread(Controller controller){
        this.controller = controller;
        this.running = true;
        this.statusChanged = false;
        this.progressBar = new JProgressBar(0, getLength());
    }
   
    public void run(){
    while(running){
        try{
            sleep(40);
        }
        catch(InterruptedException e) {
                e.printStackTrace();
            }
           
            if(isStatusChanged()){
            progressBar.setValue(progressBar.getValue() + getValue());
            setValue(0);
            if(progressBar.getValue() == progressBar.getMaximum()){
                running = false;
            }
            setStatusChanged(false);
        }
    }
    controller.getGuiDialog().savedData();
    }
}

Det skulle vist være det..?
Avatar billede di8leva Nybegynder
04. marts 2005 - 13:56 #5
1) Måske er det mig det ikke kigger godt nok, men jeg kan ikke se at du tilføjer din knap på nogen plads i koden?

2) content.setVisible(false); <--- hvorfor gør du sådan?
Avatar billede supa Nybegynder
04. marts 2005 - 14:03 #6
public void savedData(){
        progressBar.setVisible(false);
        saved = new JButton("Ok");
        saved.setFont(Controller.BUTTON);
        saved.setBounds(10, 40, 170, 20);
        saved.addActionListener(this);
        content.add(saved); <<--- Knap tilføjet..
        saved.setVisible(true);
        label1.setText("Data gemt");
    }

----

content.setVisible(false);
sættes fordi når jeg opretter klassen, så ønsker jeg ikke at den skal ses førend at jeg beder om det..
Avatar billede supa Nybegynder
04. marts 2005 - 14:23 #7
Som sagt, så er den synlig lige så snart jeg flytter musen hen over den..
Avatar billede di8leva Nybegynder
04. marts 2005 - 15:21 #8
prøv at tilføj
"content.repaint();"

efter "label1.setText("Data gemt");"
Avatar billede _carsten Nybegynder
04. marts 2005 - 17:09 #9
Fjern:          content.setVisible(false);
Det svarer til at man graver hul for at putte overskydende jord ned i.
Din contentpane vises alligevel ikke før den er klar til det.

Et godt råd - tilføj alle dine knapper/labels hvor du vil have dem og gør dem så synlige/usynlige efter behov, alternativt kan du bruge validate(), men det tror jeg vil give flimmer i dit tilfælde. Altså hver gang du har addet noget, afsluttes med validate()

eks:
public void savedData(){
  ......
  .....
  label1.setText("Data gemt");
  validate();

Dit layout skal simpelthen valideres hvergang du adder/remover noget
Avatar billede supa Nybegynder
07. marts 2005 - 12:30 #10
content.repaint();
Virker.. :D
Avatar billede supa Nybegynder
16. februar 2006 - 17:04 #11
Svar..
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