Problemas com JFileChooser e JTable

Algumas dúvidas:

–> Tem como (em swing) bloquear uma janela? Por exemplo tenho a frame principal que tem um menu. Este gera uma outra janela de configurações, mas eu queria que a janela principal ficasse bloqueada enquanto a de settings está aberta, pra impedir o usuário de usar a janela principal.

–> Quando eu salvo um arquivo com JFileChooser, ele não salva nenhuma extensão. Tem como configurar pra ele salvar automaticamente em uma extensão, pq se não tenho que digitar a extensão toda vez que for salvar.

–> Por último: Como faço pra gerar um evento de duplo clique em uma LINHA INTEIRA da JTable? Tipo, cliquei na linha da tabela, queria gerar uma janela pra editar o conteúdo. Tem como?

Sim, basta usar um jdialog pra fazer essa janela de settings, tranforma-lá em modal, colocar o Jframe como parent e pronto.

–> Você precisa fazer isso manualmente mesmo, pois não há forma nativa de colocar extensões no JFileChooser. Recupere o arquivo que o usuário digitou e mude a extensão toda vez que for salvar

–> Não sei :stuck_out_tongue:

–> ta mas como faço pra mudar a extensão? tem que fazer um getName().endsWith(".extensao") e depois? não tem um setName só um renameTo que recebe um file mas não entendi como funciona

–> eu to usando JOptionPane pra pegar input. mas eu preciso pegar uma data e eu não queria pegar um long e ter que ficar validando pelo mod (me parece gambiarra) por isso que eu queria fazer um dialog com um campo frmatado e tal. só que eu não consigo definir o tamanho do campo na tela. tipo qualquer layout manager bota o TextField do tamanho do panel inteiro. tem como eu fazer isso? tipo definir o tamanho exato do campo de texto e a posição exata.

Da para bloquear usando o JDialog
Exemplo:

public class MeuDialog extends JDialog { //atributos public MeuDialog(JFrame frame) { super(frame); setModal(true); //construção da classe parecido com o JFrame setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);//ou JDialog.HIDE_ON_CLOSE setResizeble(false); pack(); setVisible(true); } }

eu decidi fazer por JOptionPane que ja vem com inputs e tal.

só que como falei falta a data e não quero ter que parsear um long

[quote=fuadksd]Algumas dúvidas:

–> Tem como (em swing) bloquear uma janela? Por exemplo tenho a frame principal que tem um menu. Este gera uma outra janela de configurações, mas eu queria que a janela principal ficasse bloqueada enquanto a de settings está aberta, pra impedir o usuário de usar a janela principal.

–> Quando eu salvo um arquivo com JFileChooser, ele não salva nenhuma extensão. Tem como configurar pra ele salvar automaticamente em uma extensão, pq se não tenho que digitar a extensão toda vez que for salvar.

–> Por último: Como faço pra gerar um evento de duplo clique em uma LINHA INTEIRA da JTable? Tipo, cliquei na linha da tabela, queria gerar uma janela pra editar o conteúdo. Tem como?[/quote]

Opa!

–> Já responderam;
–> Também responderam;
–> Você pode criar um MouseListener para a sua tabela. Toda vez que verificar dois cliques nela, você valida se houve linha selecionada e, se satisfez a condição, recupera o objeto da linha e passa para o seu formulário!

[code]table.addMouseListener(new EdicaoRegistroMouseListener());

private class EdicaoRegistroMouseListener implements MouseListener {

public void mouseClicked(MouseEvent e) {

    if (e.getClickCount() == 2) {

        if (table.getSelectedRow() != -1) { // se houve linha selecionada...

            // Chame o método que retorna o objeto de uma determinada linha.
            // O exemplo que eu fiz chama "get", mas mude para a sua assinatura 
            // do método.
            SuaEntidade entidade = seuTableModel.get(table.getSelectedRow());

            // Cria uma instância do seu Dialog de Edição. Como parâmetro, passei
            // para o construtor o objeto da linha selecionada na sua JTable para que
            // você processe a edição dele no formulário.
            SeuDialogDeEdicao formEdicao = new SeuDialogDeEdicao(entidade);

            // Exibo na tela!
            formEdicao.showDialog();
        }
    }
}

public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}

}
[/code]

Sacou a ideia?
Fique com Deus, abraço!

isso isso

só uma coisa com diálogo de edição tu quer dizer o que. tipo to com dificuldades de fazer os frames (não gosto de fazer cxom netbeans, código muito sujo e tal) to com dificuldade no layout, organizar os componentes na tela e tal.

Geralmente utilizo tres tipos de layout
GridLayout:
Components são organizados como tabela

FlowLayout:
Components são organizados em fila horizontal

BorderLayout:
Components são organizados na borda com um component central

Com esses 3 ja da pra fazer quase tudo, no caso do BorderLayout, é necessario diser a posição:
add(BorderLayout.CENTER, component);//Centro do container
add(BorderLayout.EAST, component);//Direita do container
add(BorderLayout.WEST, component);//Esquerda do container
add(BorderLayout.NORTH, component);//Cima do container
add(BorderLayout.SOUTH, component);//Baixo do container
e os outros dois: add(component)

http://download.oracle.com/javase/tutorial/uiswing/layout/using.html
http://download.oracle.com/javase/tutorial/uiswing/layout/grid.html
http://download.oracle.com/javase/tutorial/uiswing/layout/flow.html
http://download.oracle.com/javase/tutorial/uiswing/layout/border.html

beleza. mas ainda não entendi como funciona o negócio da extensão. eu tenho que criar um novo arquivo com o nome que o usuário selecionou + .extensão?

Você faz um

if (!file.getName().endsWith(".txt")) file = new File(file.getName() + ".txt");

Isso não cria um novo arquivo, só um novo “File”. O file não representa necessariamente um arquivo existente.

Se quiser fazer layouts na mão, conheça também o MigLayout:
http://www.miglayout.com/QuickStart.pdf

Só não vale é usar o NullLayout.

[quote=ViniGodoy]Você faz um

if (!file.getName().endsWith(".txt")) file = new File(file.getName() + ".txt");

Isso não cria um novo arquivo, só um novo “File”. O file não representa necessariamente um arquivo existente.[/quote]

tá daí eu crio um FileOutputStream com esse file, passo meu ObjectOutputStream e tudo certo?

Isso.