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; }
Annonceindlæg tema
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)); }
Den første centrerer din dialog på skærmen - den næste centrerer i forhold til den component du sender med.
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.
Huske du at kalde metoden? :)
Og den skal kaldes efter du har sat størrelsen på din dialog.
Jeg vil nu også gemme metoderne i en ekstern klasse, så de kan genbruges.
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?
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; }
Og i nyere Java er show() deprecated. Derfor brug: new About_Help(new JFrame(), true).setVisible (true); i stedet for.
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 ;-)
Kurser inden for grundlæggende programmering