Bom se alguém tiver tido esse mesmo problema e quiser uma solução, vou postar a classe que eu fiz. DecimalField e NumeralField são duas classes que fiz que extend a JTextField, você pode trocar pela que você fez, ou se quiser pode me pedir que mando o fonte delas. Usei groupLayoult para fazer, deixo o frame sempre no meio e na mensagem se usar o /n ele cria linhas, também deixo aqui aberto para quem quiser melhorar o codigo poder postar. Também se tiver alguma dúvida de como usa pode me perguntar que respondo.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ProcedimentosReutilizaveis;
import Fields.DecimalField;
import Fields.NumeralField;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.GroupLayout.Group;
import javax.swing.GroupLayout.SequentialGroup;
import static javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.text.MaskFormatter;
/**
*
* @author Heitor
*/
public class DialogRetorno extends javax.swing.JDialog {
/**
* Creates new form DialogRetorno
*/
private int escolha;
private DecimalField mensagemDouble;
private NumeralField mensagemInteger;
private JFormattedTextField textFieldFormatado;
private int tipoCriador;
/**
*
* @param parent
* @param modal
* @param tamanhoLetra Tamanho da Letra do Texto
* @param mensagem Mensagem do Texto
* @param tipoCriador valor 0 Texto Comum, valor 1 Texto Numero Inteiro, valor 2 Texto Double
*/
public DialogRetorno(java.awt.Frame parent, boolean modal,int tamanhoLetra,String mensagem,int tipoCriador) {
super(parent, modal);
switch (tipoCriador) {
case 0:
jTFMensagem=new JTextField();
initComponentsJTextField(mensagem, tipoCriador, tamanhoLetra,jTFMensagem);
break;
case 1:
mensagemInteger=new NumeralField();
initComponentsJTextField(mensagem, tipoCriador, tamanhoLetra,mensagemInteger);
break;
case 2:
mensagemDouble=new DecimalField();
initComponentsJTextField(mensagem, tipoCriador, tamanhoLetra,mensagemDouble);
break;
case 3:
textFieldFormatado=new JFormattedTextField();
initComponentsJTextField(mensagem, tipoCriador, tamanhoLetra,textFieldFormatado);
break;
default:
break;
}
setPosicao();
eventosAtalho();
this.tipoCriador=tipoCriador;
}
/**
* coloca o Dialog no meio da tela
*/
private void setPosicao() {
Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
setLocation(screenSize.width / 2 - (this.getWidth() / 2),
screenSize.height / 2 - (this.getHeight() / 2));
}
/**
* Responsável por iniciar os métodos a serem usados posteriormentes
*/
private void eventosAtalho(){
getRootPane().getActionMap().put("Selecionar",new javax.swing.AbstractAction() {
public void actionPerformed(ActionEvent e) {
jBOkActionPerformed(null);
}});
getRootPane().getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "Selecionar");
//Adicionar Mapa do botão cancelar, para poder ser utilizado
getRootPane().getActionMap().put("Cancelar",new javax.swing.AbstractAction() {
public void actionPerformed(ActionEvent e) {
jBCancelarActionPerformed(null);
}});
getRootPane().getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "Cancelar");
}
/**
*
* @return String - Retorna o texto Digitado como String
*/
public String getText(){
switch (tipoCriador) {
case 0:
return jTFMensagem.getText();
case 1:
return mensagemInteger.getText();
case 2:
return mensagemDouble.getText();
case 3:
return textFieldFormatado.getText();
default:
return null;
}
}
/**
*
* @return double - Retorna o texto digitado em formato double
*/
public double pegarValorDecimalDigitado(){
if(tipoCriador!=2){
return -1;
}
return mensagemDouble.getValue();
}
/**
*
* @return int - Retorna o texto digitado em formato int, caso não seja do tipoCriador 1 retorna -1
*/
public int pegarValorInteiroDigitado(){
if(tipoCriador!=1){
return -1;
}
return mensagemInteger.getValue();
}
/**
*
* @param maxNumeros maximo de numeros permitidos no TextField
*/
public void setMaxNumerosInteiros(int maxNumeros){
if(tipoCriador!=1){
return;
}
mensagemInteger.setMaxDigits(maxNumeros);
}
/**
* Quando o tipoCriador for 3, você pode alterar a Mascara do JFormattedTextField
* @param mask String que contem a mascara
*/
public void setMascaraTextField(String mask){
if(tipoCriador!=3){
return;
}
try {
MaskFormatter maskFormatter= new MaskFormatter(mask);
textFieldFormatado.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(maskFormatter));
} catch (ParseException ex) {
Logger.getLogger(DialogRetorno.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
*
* @return int 0 para botao OK e 1 para botao Cancelar
*/
public int botaoSelecionado(){
return escolha;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponentsJTextField(String texto,int tipoMensagem,int tamanhoFonte,Component jTextField) {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jBOk = new javax.swing.JButton();
jBCancelar = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
jLabel1.setText(texto);
jLabel1.setFont(new java.awt.Font("Tahoma", 0, tamanhoFonte));
int stringWidth = jLabel1.getFontMetrics(jLabel1.getFont()).stringWidth(texto);
int stringHeight = jLabel1.getFontMetrics(jLabel1.getFont()).getHeight();
System.out.println(stringWidth);
jBOk.setText("OK");
jBOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jBOkActionPerformed(evt);
}
});
jBCancelar.setText("Cancelar");
jBCancelar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jBCancelarActionPerformed(evt);
}
});
//stringWidth = jLabel1.getFontMetrics(jLabel1.getFont()).stringWidth(texto);
//stringHeight = jLabel1.getFontMetrics(jLabel1.getFont()).getHeight();
stringWidth = 0;
stringHeight = 0;
String[] linhasMensagem=texto.split("\n");
List<JLabel> listaJLabel= new ArrayList();
System.out.println("Tamanho vetor Linhas: "+linhasMensagem.length);
for(int i=0;i<linhasMensagem.length;i++){
JLabel jLabel=new JLabel();
jLabel.setText(linhasMensagem[i]);
jLabel.setFont(new java.awt.Font("Tahoma", 0, tamanhoFonte));
listaJLabel.add(jLabel);
int stringWidthFor = jLabel.getFontMetrics(jLabel.getFont()).stringWidth(linhasMensagem[i]);
if(stringWidth<stringWidthFor){
stringWidth=stringWidthFor;
}
}
int gapBoataoOk=0;
int gapTextField=0;
if(stringWidth>177){
gapBoataoOk=(stringWidth-177)/2;
gapTextField=(stringWidth-177)/2;
}
System.out.println("entrou");
System.out.println(gapTextField);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
Group groupHorizontal = null;
Group groupVertical = null;
SequentialGroup grupoSequencialHorizontal=null;
SequentialGroup grupoSequencialVertical=null;
Group groupHorizontalFor = null;
for(int i=0;i<linhasMensagem.length;i++){
if(i==0){
groupHorizontalFor=jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(listaJLabel.get(i), javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE);
grupoSequencialVertical=jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(listaJLabel.get(i), javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(10, 10, 10);
}
else{
groupHorizontalFor.addComponent(listaJLabel.get(i), javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE);
grupoSequencialVertical.addComponent(listaJLabel.get(i), javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(10, 10, 10);
}
}
Group testegroup=jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(gapBoataoOk,gapBoataoOk,gapBoataoOk)
.addComponent(jBOk)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jBCancelar))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(gapTextField,gapTextField,gapTextField)
.addComponent(jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE));
groupHorizontalFor.addGroup(testegroup);
grupoSequencialHorizontal=jPanel1Layout.createSequentialGroup()
.addGap(31, 31, 31)
.addGroup(groupHorizontalFor)
.addContainerGap(31, Short.MAX_VALUE);
groupHorizontal=jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(grupoSequencialHorizontal);
jPanel1Layout.setHorizontalGroup(groupHorizontal);
jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jBCancelar, jBOk});
grupoSequencialVertical.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jBOk)
.addComponent(jBCancelar))
.addContainerGap(18, Short.MAX_VALUE));
groupVertical=jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(grupoSequencialVertical);
jPanel1Layout.setVerticalGroup(groupVertical);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}
private void jBOkActionPerformed(java.awt.event.ActionEvent evt) {
escolha=0;
dispose();
}
private void jBCancelarActionPerformed(java.awt.event.ActionEvent evt) {
escolha=1;
dispose();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(DialogRetorno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(DialogRetorno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(DialogRetorno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(DialogRetorno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
//</editor-fold>
/* Create and display the dialog */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
DialogRetorno dialog = new DialogRetorno(new javax.swing.JFrame(), true,15,"Insira o Texto Aqui",0);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jBCancelar;
private javax.swing.JButton jBOk;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField jTFMensagem;
// End of variables declaration
}