Avatar billede netspinner Nybegynder
19. maj 2006 - 20:25 Der er 9 kommentarer og
1 løsning

Centrering af JDialog

Jeg har forsøgt med nogle forskellige tilgange, men kan ikke få min JDialog til at blive centreret på skærmen hver gang den startes.

Koden ser sådan ud:

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

public class About_Help extends javax.swing.JDialog {
   
    public About_Help(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        setResizable(false);
        initComponents();
        setSize(400, 420);
    }

    private void initComponents() {
        jButton1 = new JButton();
        panel = new JPanel();
        jTextArea1 = new JTextArea();

        setTitle("Om & hjælp");
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        jButton1.setText("Luk");
        jButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                close(evt);
            }
        });

        getContentPane().add(jButton1, BorderLayout.SOUTH);

        getContentPane().add(panel, BorderLayout.CENTER);
       
       
        jTextArea1.setText("");
       
        jTextArea1.setEnabled(false);
        jTextArea1.setFont(new Font("ARIAL", 1, 12));
        jTextArea1.setDisabledTextColor(Color.blue);
        getContentPane().add(jTextArea1, BorderLayout.CENTER);

        pack();
    }

    private void close(ActionEvent evt) {
        dispose();
    }
   
    public static void main(String args[]) {
        new About_Help(new JFrame(), true).show();
    }

    private JButton jButton1;
    private JPanel panel; 
    private JTextArea jTextArea1;
}
Avatar billede mikkelbm Nybegynder
19. maj 2006 - 20:28 #1
Jeg har følgende metoder liggende:

public static void centerDialogOnScreen (JDialog dialog)
{
    Toolkit theKit = Toolkit.getDefaultToolkit();
    Dimension windowSize = theKit.getScreenSize();

    dialog.setLocation( (windowSize.width / 2) - (dialog.getWidth() / 2),
              (windowSize.height / 2) - (dialog.getHeight() / 2));
}

public static void centerDialog (Component owner, JDialog dialog)
{
    dialog.setLocation(owner.getX() + (owner.getWidth() / 2) - (dialog.getWidth() / 2),
                owner.getY() + (owner.getHeight() / 2) - (dialog.getHeight() / 2));
}
Avatar billede mikkelbm Nybegynder
19. maj 2006 - 20:30 #2
Den første centrerer din dialog på skærmen - den næste centrerer i forhold til den component du sender med.
Avatar billede netspinner Nybegynder
19. maj 2006 - 20:36 #3
Mærkeligt nok gør den ingenting. Jeg har sat metoderne ind i ovenstående klasse, men den åbner samme sted hver gang, øverst venstre hjørne.
Avatar billede mikkelbm Nybegynder
19. maj 2006 - 20:38 #4
Huske du at kalde metoden? :)
Avatar billede mikkelbm Nybegynder
19. maj 2006 - 20:38 #5
Og den skal kaldes efter du har sat størrelsen på din dialog.
Avatar billede mikkelbm Nybegynder
19. maj 2006 - 20:39 #6
Jeg vil nu også gemme metoderne i en ekstern klasse, så de kan genbruges.
Avatar billede netspinner Nybegynder
19. maj 2006 - 20:44 #7
Jeg er rimelig forvirret, for jeg vil jo have den til at centrere hver gang man kalder med public static void main(String[] args)

I øvrigt er det en JDialog, der bliver kaldt fra en anden klasse, når der trykkes på en knap: new About_Help(new JFrame(), true).show();

Så metoderne skal helst auto-eksekvere sammen med den sætning. Jeg aner ikke hvordan jeg får det til at virke, så kan du ikke prøve at forene min klasse med dine metoder?
Avatar billede mikkelbm Nybegynder
19. maj 2006 - 20:47 #8
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class About_Help extends javax.swing.JDialog {
   
    public About_Help(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        setResizable(false);
        initComponents();
        setSize(400, 420);
        centerDialogOnScreen (this);
    }

    private void initComponents() {
        jButton1 = new JButton();
        panel = new JPanel();
        jTextArea1 = new JTextArea();

        setTitle("Om & hjælp");
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        jButton1.setText("Luk");
        jButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                close(evt);
            }
        });

        getContentPane().add(jButton1, BorderLayout.SOUTH);

        getContentPane().add(panel, BorderLayout.CENTER);
       
       
        jTextArea1.setText("");
       
        jTextArea1.setEnabled(false);
        jTextArea1.setFont(new Font("ARIAL", 1, 12));
        jTextArea1.setDisabledTextColor(Color.blue);
        getContentPane().add(jTextArea1, BorderLayout.CENTER);

        pack();
    }

    private void close(ActionEvent evt) {
        dispose();
    }
   
    public static void main(String args[]) {
        new About_Help(new JFrame(), true).show();
    }

    public static void centerDialogOnScreen (JDialog dialog)
    {
      Toolkit theKit = Toolkit.getDefaultToolkit();
      Dimension windowSize = theKit.getScreenSize();

      dialog.setLocation( (windowSize.width / 2) - (dialog.getWidth() / 2),
              (windowSize.height / 2) - (dialog.getHeight() / 2));
    }


    private JButton jButton1;
    private JPanel panel; 
    private JTextArea jTextArea1;
}
Avatar billede mikkelbm Nybegynder
19. maj 2006 - 20:50 #9
Og i nyere Java er show() deprecated. Derfor brug:

new About_Help(new JFrame(), true).setVisible (true);

i stedet for.
Avatar billede netspinner Nybegynder
19. maj 2006 - 20:51 #10
OK, mange tak for det. Ja, jeg får også en warning hver gang med at show() er deprecated. Du er velkommen til at se om du kan hjælpe med de andre spørgsmål jeg har stillet i Java-kategorien dag, der er gode point på højkant ;-)
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