Avatar billede trp79 Nybegynder
16. marts 2003 - 15:26 Der er 8 kommentarer og
1 løsning

2 lette spg. til GUI (Swing)

1)
Kan man i et JTextArea undgå at når man trykker på tab, at den så tab'er et antal tegn ind i JTextArea og istedet tab'ber videre til næste GUI komponent (fx en JTextField)? Altså sætte "set.jTextArea.tab = (false);" eller noget i den stil?
Synes ikke jeg kan finde noget i API'en om det:o(

2)
Kan man lave det sådan at JDialog er "always on top". Jeg har en JDialog som åbnes i en klasse ved tryk på en knap. Jeg har lavet den modal. Men problemet ligger i at hvis man går væk fra applikationen og tilbage igen, så ser man bare den bagvedliggende JFrame som man ikke kan komme til fordi man har åbnet en JDialog. Bruger man derimod alt+tab til at skøjte rundt med, så ligger JDialogen øverst.
Min JDialog ligger ikke i en klasse for sig selv men, er en del af en aden klasse. Hvis det kan lade sig gøre at lave den always on top, hvordan gør man det så?
Synes ikke jeg kan finde noget i API'en :o(
Avatar billede =maddog= Nybegynder
16. marts 2003 - 15:37 #1
1) textarea.setFocusAccelerator('\t');
Avatar billede =maddog= Nybegynder
16. marts 2003 - 15:38 #2
vrøvl. ignorer det.
Avatar billede viht Nybegynder
16. marts 2003 - 15:43 #3
Her har jeg implementeret begge dele i samme JFrame:
Avatar billede viht Nybegynder
16. marts 2003 - 15:43 #4
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class TestFrame extends JFrame {
   
    public TestFrame() {
        super("Test");
        setSize(400,400);
       
        final JTextArea area = new JTextArea();
        area.getInputMap().put(KeyStroke.getKeyStroke("TAB"), "none");
        area.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent event) {
                if( event.getKeyCode() == KeyEvent.VK_TAB )
                    area.transferFocus();
            }
        });
       
        getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
       
        JPanel buttonPanel = new JPanel();
        JButton closeButton = new JButton("Luk");
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });
        buttonPanel.add(closeButton);
       
        JButton dialogButton = new JButton("Vis dialog");
        dialogButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                showDialog();
            }
        });
        buttonPanel.add(dialogButton);
       
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    private void showDialog() {
        final JDialog dialog = new JOptionPane().createDialog(this, "Dialog");
        dialog.setModal(true);
        dialog.setSize(200,200);
       
        JPanel mainPanel = new JPanel(new BorderLayout());
       
        JTextArea area = new JTextArea();
        mainPanel.add(new JScrollPane(area), BorderLayout.CENTER);
       
        JPanel buttonPanel = new JPanel();
        JButton closeButton = new JButton("Luk");
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                dialog.setVisible(false);
            }
        });
        buttonPanel.add(closeButton);
        mainPanel.add(buttonPanel, BorderLayout.SOUTH);
       
        dialog.setContentPane(mainPanel);
       
        dialog.setLocationRelativeTo(this);
        dialog.setVisible(true);
    }
}

class Go {
    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede viht Nybegynder
16. marts 2003 - 15:46 #5
Ad 1)
Du deaktiverer først JTextArea objektets handling ved tryk på TAB tasten. Derefter tilføjer du en keyListener på JTextArea der blot flytter fokus til næste komponent ved tryk på netop TAB.

Ad 2)
Hvis du angiver en parentcomponent til en JDialog vil den altid være ovenpå den komponent.
Avatar billede trp79 Nybegynder
16. marts 2003 - 16:02 #6
Forrygende Viht! Det funker jo bare som det skal :o)

Hvad gør setLocationRelativeTo(this)? Det virker nemlig også selvom man ikke kalden den metode...
Avatar billede viht Nybegynder
16. marts 2003 - 16:03 #7
Den sætter bare dialogen midt i den komponent du giver med som inputparameter.
Avatar billede trp79 Nybegynder
16. marts 2003 - 16:07 #8
Okey, så var det derfor jeg ikke kunne se nogen forskel (jeg gjorde det i forvejen med setLocation).
Tak for hjælpen, mvh
Torben
Avatar billede viht Nybegynder
16. marts 2003 - 16:07 #9
Selv tak :)
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