ZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: Verdana; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"> COLOR: windowtext; FONT-FAMILY: Verdana">I de Preferences do Java com toda sua simplicidade e robustez. Para que serve: A API de Preferences provê uma forma extremamente simples, porém eficaz, de armazenar preferências do usuário e/ou sistema. Em que situação o tema é útil: Salvar preferências é uma funcionalidade presente em grande parte das aplicações que utilizamos no dia a dia. Portanto, esse deve ser um ponto a ser considerado na hora de desenvolver uma aplicação, principalmente quando se trata de uma aplicação desktop. Java Preferences API: Nos dias de hoje, armazenar as preferências, explícitas e implícitas, do usuário é uma característica essencial em aplicações desktop. Isto pode ser feito de diversas maneiras. Podemos implementar uma solução completa, de forma ad hoc, sem reaproveitar APIs já existentes. Outra alternativa é utilizarmos a API de Properties, que nos provê a facilidade de ler e escrever valores de propriedades (preferências) num arquivo de configuração. Porém, nenhuma dessas alternativas resolve o problema adequadamente. Nenhuma delas oferece, por exemplo, distinção entre preferências do usuário e preferências do sistema. Java, entretanto, possui uma API desenvolvida especialmente para este fim, a API de Preferences. Com ela, a tarefa de armazenar e recuperar as preferências do usuário e/ou sistema torna-se absurdamente simples. Tudo que precisamos fazer é obter um objeto Preferences relativo ao nó de preferências da nossa aplicação (ex.: através do método Preferences.userRoot().node(“com/app/pref”)) e a partir daí chamar os métodos get(), para recuperar, e put(), para armazenar o valor de alguma preferência através de sua chave. Armazenar as preferências do usuário é uma funcionalidade presente em grande parte das aplicações que utilizamos no dia a dia. Estamos tão acostumados a essa facilidade que, muitas vezes, nem nos damos conta de que existem algumas dezenas ou até milhares de linhas de código responsáveis por essa característica. E não estamos falando apenas de preferências configuradas diretamente pelo usuário, como a página inicial do browser ou tamanho da fonte de um editor de texto. Estamos nos referindo também às preferências armazenadas implicitamente pelas aplicações. Um exemplo típico dessa situação acontece quando salvamos uma imagem a partir do browser e, em seguida, pedimos para salvar outra. Nesses casos, o browser geralmente armazena o diretório onde salvamos a última imagem e, na segunda vez, já abre o diálogo de "Salvar" neste mesmo diretório para facilitar nossa vida. Características simples como essa, às vezes despercebidas, podem fazer uma enorme diferença na usabilidade da aplicação e, conseqüentemente, na satisfação do usuário final. Começamos a atinar mais para a importância dessa característica quando sentimos sua falta. Isso é bastante comum quando estamos desenvolvendo alguma aplicação, principalmente desktop, e não implementamos o suporte a esse tipo de facilidade. A Listagem 1 mostra o código da classe FileContentViewer. Esta classe representa uma aplicação Swing bem simples, que apenas lê um arquivo texto e exibe seu conteúdo na tela. O método initializeUIComponents() é responsável por montar a interface gráfica, enquanto o método loadFile() mostra um JFileChooser para que o usuário selecione um arquivo e, uma vez selecionado, mostra seu conteúdo no JTextArea. Compile o código e em seguida crie um arquivo para testes (teste.txt, por exemplo) contendo um texto qualquer na Área de trabalho. Agora rode a aplicação e utilize o arquivo criado para testá-la. Sem problemas! Certo? Vamos analisar. Quando usamos um objeto JFileChooser sem especificar o diretório inicial, como no exemplo, e exibimos o dialogo “Open” (Abrir), este geralmente é aberto mostrando a pasta Meus Documentos[1], forçando o usuário a navegar até a pasta onde se encontra o arquivo desejado (a “Área de trabalho” no nosso caso). Isso pode aparentar não ser problema quando usamos a aplicação uma única vez para abrir um único arquivo. Mas, imagine se formos abrir dezenas de arquivos continuamente? Você certamente não vai gostar de ter que repetir as mesmas operações de navegação a todo o momento. O usuário certamente não ficará muito satisfeito com a usabilidade da aplicação. Como podemos ver, a capacidade que uma aplicação possui de armazenar as preferências, explícitas e implícitas, do usuário faz uma enorme diferença em sua usabilidade. Existem diversas maneiras de se implementar essa característica, mas o que muitos não sabem é que o próprio Java possui uma API desenvolvida especificamente para esse fim. Neste artigo veremos algumas das formas que geralmente são utilizadas para realizar essa tarefa e a solução oferecida pelo Java, a Java Preferences API. Listagem 1. Aplicação Swing que mostra o conteúdo de um arquivo texto // Declaração de pacote e imports omitidos public class FileContentViewer extends JFrame { private JButton btnOpenFile; private JLabel lblFileContent; private JTextArea txaFileContent; public FileContentViewer() { super("File Content Viewer"); initalizeUIComponents(); } private void initalizeUIComponents() { Container container = getContentPane(); setLayout(new BoxLayout(container, BoxLayout.Y_AXIS)); btnOpenFile = new JButton("Open File..."); btnOpenFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { loadFile(); } catch (IOException ex) { JOptionPane.showMessageDialog(FileContentViewer.this, "Error opening file.", "Error", JOptionPane.ERROR_MESSAGE); } } }); container.add(btnOpenFile); lblFileContent = new JLabel("File Content:"); container.add(lblFileContent); txaFileContent = new JTextArea(); txaFileContent.setRows(20); txaFileContent.setColumns(50); container.add(new JScrollPane(txaFileContent)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Artigo Java Magazine 61 - Java Preferences API
Descubra como armazenar as preferências do usuário pode se tornar uma tarefa fácil e rápida, com a ajuda da API de Preferences do Java.
Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.