Avatar billede themepark Nybegynder
26. marts 2005 - 13:59 Der er 13 kommentarer og
1 løsning

Fokus på JFrame

Hvordan fungerer fokus egentlig i Java? Er det den sidst oprettede komponent, der, som standard, vil få fokus, når ens JFrame bliver paintet?

Og hvordan gør jeg egentlig, hvis jeg vil sætte fokus på min JFrame som standard, selvom jeg har en enkelt JButton, som åbenbart tager fokus?

Jeg har prøvet med en requestFocusInWindow() lige før min setVisible(true), det ændrer ikke på noget, men hvis det er lige efter setVisible(true), får min JFrame åbenbart fokus, men min JButton bliver skjult, dog vises den, hvis jeg klikker i det område, hvor jeg har vist den.

Kort fortalt, jeg vil have min JFrame i fokus, men min JButton skal stadig vises alligevel :)
Avatar billede kalp Novice
26. marts 2005 - 14:06 #1
prøv denne

    this.addWindowListener(new java.awt.event.WindowAdapter()
      {
        public void windowOpened(WindowEvent e)
        {
          this_windowOpened(e);
        }
      });

private void this_windowOpened(WindowEvent e)
  {
  }
Avatar billede kalp Novice
26. marts 2005 - 14:07 #2
private void this_windowOpened(WindowEvent e)
  {
this.requestFocusInWindow();
  }
Avatar billede themepark Nybegynder
26. marts 2005 - 14:10 #3
Kan du ikke i stedet for måske forklarer mig, hvorfor min JButton forsvinder? Og hvordan fokus fungerer i Java? Ligesom jeg har spurgt? :) For øvrigt skjules min JButton nu første gang, jeg starter mit Java program, men derefter vises den, men får desværre også fokus på trods af min requestFocusInWindow()???
Avatar billede kalp Novice
26. marts 2005 - 14:14 #4
hov sorry hvis jframe skal have focus skal du bruge

this.requestFocus();

lige angående din jbutton så kan jeg ikke lige svare på det da det må være noget i koden. Er den visible fra start af? ligger den i en container?
Avatar billede themepark Nybegynder
26. marts 2005 - 14:19 #5
Jeg sætter den ikke til visible, det er den som standard, og selvom jeg prøver det, så bliver den stadig skjult...det er som om min JFrame kommer til at overlappe min JButton på en eller anden måde. Og ja, den ligger i en container som jeg laver med getContentPane();
Avatar billede kalp Novice
26. marts 2005 - 14:31 #6
getContentPane(); så ligger den da direkte på din jframe? container tænker jeg på fx panel
Avatar billede themepark Nybegynder
26. marts 2005 - 15:03 #7
Ja, lige præcis, men den er jo også en container, åbenbart. Men nej, det er den eneste container, jeg har, ingen JPanels eller lignende.
Avatar billede kalp Novice
26. marts 2005 - 15:09 #8
normalt ligger man sine ting på en panel eller lignende. (forklare ikke hvorfor den ikke er synlig din knap)
men synes du skal prøve at ligge din knap på en panel
Avatar billede themepark Nybegynder
26. marts 2005 - 15:29 #9
Well, det er lidt unødvendigt, da min knap kun er til midlertidig brug, men okay, hvis jeg ikke kan finde ud af hvorfor, må jeg jo prøve det.
Avatar billede _carsten Nybegynder
26. marts 2005 - 22:39 #10
Forstår ikke lige hvorfor din Frame skal have focus og ikke en knap eller andet, men du kan flytte focus til din frame ved at adde en componentListener og flytte focus når den vises.

Normal focus rækkefølge foregår i samme rækkefølge som komponenterne addes


Eksempel på JFrame focus:


public class Test extends javax.swing.JFrame {
   
    public Test() {
        initComponents();
        setSize(400,400);
    }
   
    private void initComponents() {
        jButton1 = new javax.swing.JButton();

        getContentPane().setLayout(new java.awt.FlowLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                ggg(evt);
            }
        });

        jButton1.setText("jButton1");
        getContentPane().add(jButton1);

        pack();
    }

    private void ggg(java.awt.event.ComponentEvent evt) {
        requestFocus();
    }
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Test().setVisible(true);
            }
        });
    }
   
    private javax.swing.JButton jButton1;   
}
Avatar billede themepark Nybegynder
27. marts 2005 - 19:04 #11
He he...jeg spurgte lige på Usenet, og fik en noget nemmere løsning...blot at sætte setFocusable(false); *g* Men jeg tror egentlig, det med den skjulte button har noget at gøre med lagene i JFrame, så når jeg sætter fokus på min JFrame, kommer hele det lag øverst, og overskygger derved min JButton :)
Avatar billede _carsten Nybegynder
27. marts 2005 - 21:20 #12
Øhh - ja setFocusable(false); kendes vel af de fleste

Men der jo himmel vid forskel på om en knap IKKE MÅ kunne få focus eller om det er Framen SKAL have focus når den åbnes, hvilket jo ikke er nogen hindring for at knappen kan opnå focus senere - og jeg tror vi var et par stykker som opfattede spørgsmålet på den måde :)
Avatar billede kalp Novice
27. marts 2005 - 21:21 #13
:o)
Avatar billede themepark Nybegynder
29. marts 2005 - 13:45 #14
Jeg er temmelig meget nybegynder i Java...I know nuthing (for nu at citere en kendt spanioler *g*), og da det alligevel kun er en midlertidig knap, så er jeg egentlig ligeglad med om den kan få fokus eller ej, bare det er nemt *g*
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