Porque que as minhas jdialogs não estão sendo colocadas no meio da tela?

Olá, eu criei essa classe:
`

package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Teste implements ActionListener{
  JDialog dialog1 = new JDialog();
  JButton bt = new JButton("Opção1");
  JButton bt2 = new JButton("Opção2");
  BorderLayout layout = new BorderLayout();
  JButton bt3 = new JButton("Opção1");
  JButton bt4 = new JButton("Opção1");
  Font f = new Font("Comic Sans MS",Font.BOLD,30);
  JDialog dialog2 = new JDialog();
  JLabel title = new JLabel("titulo");
  JDialog dialog3 = new JDialog();
  JTextField name = new JTextField("");
  JButton ok = new JButton("ok");
  JLabel title3 = new JLabel("titulo2");
  JLabel title2 = new JLabel("titulo3");
    Teste(){
	dialog1.setUndecorated(true);
	dialog1.setVisible(true);
	title.setFont(f);
	title.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
	bt.setFont(f);
	bt2.setFont(f);
	bt.setPreferredSize(new Dimension(bt.getWidth(),80));
	bt2.setPreferredSize(new Dimension(bt2.getWidth(),80));
	dialog1.setLayout(layout);
	dialog1.add(title,BorderLayout.NORTH);
	dialog1.add(bt,BorderLayout.CENTER);
	dialog1.add(bt2,BorderLayout.SOUTH);
	dialog1.setLocationRelativeTo(null);
	dialog1.pack();
	name.addKeyListener(new KeyAdapter(){
		public void keyPressed(KeyEvent e){
			if(e.getKeyCode()==KeyEvent.VK_ENTER){
				dialog3.dispose();
			}
		}
	});
	bt.addActionListener(this);
	bt2.addActionListener(this);
	bt3.addActionListener(this);
	bt4.addActionListener(this);
	ok.addActionListener(this);
 }
 public void actionPerformed(ActionEvent evento) {
if(evento.getSource()==bt){
	dialog1.dispose();
	dialog2.setUndecorated(true);
	dialog2.setVisible(true);
	title2.setFont(f);
	bt3.setFont(f);
	bt4.setFont(f);
	title2.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
	title2.setHorizontalAlignment(JLabel.CENTER);
	bt3.setBorder(BorderFactory.createEmptyBorder(20,40,20,40));
	bt4.setBorder(BorderFactory.createEmptyBorder(20,40,20,40));
	dialog2.setLayout(layout);
	dialog2.add(title2,BorderLayout.NORTH);
	dialog2.add(bt3,BorderLayout.CENTER);
	dialog2.add(bt4,BorderLayout.SOUTH);
	dialog2.setLocationRelativeTo(null);
	dialog2.pack();
}
if(evento.getSource()==bt3){
	dialog2.dispose();
	dialog3.setUndecorated(true);
	dialog3.setVisible(true);
	dialog3.setLayout(layout);
	title2.setFont(f);
	title2.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
	name.setPreferredSize(new Dimension(0,50));
	name.setFont(f);
	ok.setFont(f);
	dialog3.add(title2,BorderLayout.NORTH);
	dialog3.add(name,BorderLayout.CENTER);
	dialog3.add(ok,BorderLayout.SOUTH);
	dialog3.setLocationRelativeTo(null);
	dialog3.pack();
}
if(evento.getSource()==bt4){
	dialog2.dispose();
}
if(evento.getSource()==bt2){
	dialog1.dispose();
}
if(evento.getSource()==ok){
	dialog3.dispose();
}
  }
}

`
Meu objetivo inicial era fazer jdialogs que iram aparecendo perguntando coisas para o usuário mais era para que todas as jdialogs ficassem centralizadas na tela, mais isso não está acontecendo, alguém pode me explicar porquê?

Centralizar no meio da tela

dialog.pack();
dialog.setLocationRelativeTo(null);

Centralizar no meio do jframe

dialog.pack();
dialog.setLocationRelativeTo(jframe);
4 curtidas

Ok, muito obrigado, eu não sabia que o pack tinha que vir primeiro :smile: