Avatar billede luctatic Nybegynder
04. marts 2003 - 16:39 Der er 6 kommentarer og
2 løsninger

Tab order

Hurtigt spørgsmål. Er det muligt at sætte en tab-order på en java-GUI, eller bliver man nød til at finde sig i den rækkefølge java selv laver?

Som standard går tabulator stoppene fra venstre mod højre, men nogle gange kunne det måske være fordel-agtigt at gå ned kun i venstre side først, og dernæst i højre side, men vi kan ikke finde nogle steder hvor en tab-order kan sættes. Er det overhovedet muligt?
Avatar billede arne_v Ekspert
04. marts 2003 - 16:54 #1
Avatar billede luctatic Nybegynder
04. marts 2003 - 17:56 #2
Jo - det var en måde at gøre det på. Besværligt men det vil virke. Nu er jeg gammel delphiprogrammør, så derfor tænkte jeg om java havde en option på fx textfields som satte dem op i en bestemt tab-order som delphi blandt andet havde. Men det lader ikke til at være årsagen, og java er da ved gud heller ikke ligefrem GUI sproget man nyder at bruge :D
Avatar billede viht Nybegynder
04. marts 2003 - 18:38 #3
luctatic >> Det er jo nu ikke helt enig i :)
Jeg mener at Java er et meget godt sprog når man programmerer store brugergrænseflader. Jeg kender ikke et sprog der er nemmere skalerbart end Java. Desuden er hele Swing pakken bygget om omkring MVC, som gør det noget mere fleksibelt i store applikationer.
Avatar billede arne_v Ekspert
04. marts 2003 - 19:40 #4
Hm.

Java har ihvertfald ikke rigtigt slået igennem til GUI applikationer.

Det kan der være mange ikke tekniske grunde til.

Men performance og restriktioner p.g.a. portabiliteten tæller
sikkert også lidt.
Avatar billede arne_v Ekspert
04. marts 2003 - 19:42 #5
Der er faktisk gode GUI'er i Java - jeg er f.eks. meget imponeret
af JEdit 4.1 !

Men nej hvor er der også mange elendinge GUI'er i Java, hvor man kan køre
hen til bageren og købe morgenbrød mens programmet starter op.
Avatar billede _carsten Nybegynder
04. marts 2003 - 23:05 #6
Ja.

1. Du tilføjer dine komponenter i den rækkefølge, du ønsker dine tabstop skal have.

2. Brug focusTravelsalPolicy (som jeg ikke har sat mig så meget ind i endnu).

3. Eller prøv om du kan bruge min hjemmestrikkede model, som følger her.

Carsten



public class TabTest extends javax.swing.JFrame {
    public TabTest() {
        initComponents();
        keyBoard();
    }
   

    private void initComponents() {
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jButton2 = new javax.swing.JButton();
        jTextField3 = new javax.swing.JTextField();

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

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

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

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

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

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

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

        pack();
    }
   

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
 
   
    public void keyBoard() {
        java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(
        createKeyEventDispatcher());
        this.setBounds(100,100,400,300);
    } 
   
    public  java.awt.KeyEventDispatcher createKeyEventDispatcher(){ 
        return new java.awt.KeyEventDispatcher(){
            public  boolean dispatchKeyEvent(java.awt.event.KeyEvent e){

                if(e.KEY_PRESSED == java.awt.event.KeyEvent.KEY_PRESSED && e.getID() == 401){
                    if(e.getModifiers() == java.awt.event.KeyEvent.SHIFT_MASK &&
                        e.getKeyCode() == java.awt.event.KeyEvent.VK_TAB){
                           
                          System.out.println("SHIFT og TAB");
                         
                          // Kunne gøres smartere, det er test !
                          if (jTextField1.hasFocus())
                              jTextField3.grabFocus();
                          else if(jTextField2.hasFocus())
                              jTextField1.grabFocus();
                          else if(jTextField3.hasFocus())
                              jTextField2.grabFocus();
                          else
                              getFocusOwner().transferFocus();
                          return true;
                    }
                    else if(e.getKeyCode() == java.awt.event.KeyEvent.VK_TAB){
                     
                        System.out.println("Kun TAB");
                       
                        if (jTextField1.hasFocus())
                            jTextField2.requestFocus();
                        else if(jTextField2.hasFocus())
                            jTextField3.requestFocus();
                        else if(jTextField3.hasFocus())
                            jTextField1.requestFocus();
                        else
                            getFocusOwner().transferFocus();
                        return true;   
                    }
                }
            return false;
        }
        };
    }

   
    public static void main(String args[]) {
        new TabTest().show();
    }
   
   
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField3;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField1;
}
Avatar billede luctatic Nybegynder
05. marts 2003 - 02:03 #7
Prøver jeg af imorgen.
Avatar billede luctatic Nybegynder
05. marts 2003 - 11:34 #8
viht >> Java er funktionelt til GUI. Det er praktisk men ikke altid lige pænt. Det er jo heller ikke javas force, da man har mange andre værktøjer til at lave en gui hvis det er det man vil lave.

Og til Arne og Carsten, det virker jo. Tror dog jeg vælger ikke at bruge det. Men pointene skal I ha'.
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