Variavel static armazenar

2 respostas
S

Ola pessoal veja so minha duvida tenho uma JFrame e nele tem um 3 jbutton que funciona para o usuario escolher se as telas irao abrir centralizado ou se irao abrir para a esquerda ou para a direita cada botao com sua funcao!!
E quando clico no botao ex: ESQUERDA(que no caso funciona para as telas abrirem para a esquerda), ele fica armazenado em uma variavel estatica left fazendo que todas as janelas apartir daquele momento abram para a esquerda, o problema é o seguinte quando ele fecho o sistema ele perde a configuracao a continua abrindo o default, como deixo armazenado na hd a alteração feita no jbutton? se fosse em web seria armazenar um cookie!! vlw pela atenção!

2 Respostas

M

samuelM

no meu caso que utilizo Banco de Dados SQL eu iria guardar a informação em alguma tabela, e sempre que eu iniciar o sistema, eu iria pegar a ultima configuração e executar.

Para no caso não precisar trabalhar com SQL você pode aprender um pouco sobre persistência de dados, e guardar estas configurações em algum arquivo no HD, e sempre que sua aplicação executar, você vai la e busca as ultimas alterações realizadas.

Se estiver errado, por favor me corrijam.

Espero ter ajudado.

A

Cara, veja o java.util.Properties.

Antes de fechar a aplicação, grave os dados em um arquivo de configuração. Aí, quando o usuário abrir a sua aplicação, carregue os dados deste arquivo de configuração.
Esse é um código simples que tenho aqui:

public class MainController {

	public static void main(String[] args) {
                /* coloco um windowlistener no meu JFrame principal.
		WindowListener x = new WindowListener() {

.
.
.
			@Override
			public void windowClosing(WindowEvent e) {
				try {
					MainController.saveConfiguration();
				} catch(IOException ex) {
					ex.printStackTrace();
				}
				System.exit(0);
				
				
			}
.
.
.
		};

		MainView.addWindowListener(x);
		Properties p = MainController.getConfigurationProperties();
		MainView.setOriginalFilename(p.getProperty("filename","autosave.csg"));
		MainView.setFilePath(p.getProperty("path","C:\\Program Files (x86)\\Steam\\steamapps\\common\\age of wonders\\Save"));
		MainView.setRenamePrefix(p.getProperty(P_PREFIX,"on%.csg"));
.
.
.

O código do MainView.addWindowListener(x) basicamente faz isso

public static void addWindowListener(WindowListener x) {
		mainFrame.addWindowListener(x);
		mainFrame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
		
	}

Onde o mainFrame é um JFrame. Repare que estou mandando a janela não fechar automaticamente ao se clicar no “X” da janela.
Agora o código que faz a “mágica” é um código no main que le as propriedades do arquivo de configuração.

private static Properties configurationProperties;
	private static Properties getConfigurationProperties() {
		if(configurationProperties ==null) {
			configurationProperties = new Properties();
			try {
				configurationProperties.load(getConfigurationReader());
			} catch(IOException e) {
				e.printStackTrace();
			}
			
		}
		return configurationProperties;
	}

E para gravar as propriedades.

protected static void saveConfiguration() throws IOException {
		System.out.println("saving configuration file");
		Properties p = getConfigurationProperties();
		p.setProperty(P_FILENAME, MainView.getFilename());
		p.setProperty(P_PATH,MainView.getLocalFolder());
		p.setProperty(P_PREFIX, MainView.getRenamePrefix());
		writeProperties(p);
	}


	private static void writeProperties(Properties p) throws IOException {
		Writer w = MainController.getConfigurationWriter();
		p.store(w,"");
		w.close();

	}

Nota, esse código do jeito que está aqui não vai funcionar, fiz só um cut e paste de alguns pedaços, pra você ter uma idéia.

Criado 22 de janeiro de 2012
Ultima resposta 22 de jan. de 2012
Respostas 2
Participantes 3