Problema com swing

6 respostas
johnnyWiller

Olá, eu desenvolvi um software para uma biblioteca, blz… O problema é o seguinte, aqui em casa o software roda certinho criei uma tela principal com um verde gradiente, uns botoes no canto esquerdo e uma toolbar em cima. O problema é que eu instalei esse software no computador do meu colégio e la a máquina é meio fraquinha ai a janela abre mas fica umas partes que nao pinta, por exemplo na toolBar fica uma parte sem pintar ai aparece o desktop atrás. Também quando eu abro outros frames do programa e depois os fecho fica uns rastros deles na janela principal do software, parece que o computador não consegue terminar de limpar a janela, entenderam?
Estou usando um trecho assim na inicialização da janela principal

javax.swing.SwingUtilities.invokeLater(new Runnable() {	
			public void run() {				
				new Principal();		
			}
		});
		
	}

mas não mudou nada :/, lembrando aqui em casa que o pc é melhor, roda tudo certinho, alguém sabe de algum ‘truque’ para o swing funcionar melhor nesses pcs mais lentos?

6 Respostas

johnnyWiller

Então, não sei direito o que esse metodo aí faz, eu penso que ele espera todo o swing desenhar e depois mostra na tela… Cara eu posso postar o código aqui, mas é sem mistério é apenas uma tela com BG gradiente, no meu pc abre certinho, só que no pc do colégio abre com uns pedaços faltando e quando fecho alguns frames filho fica o rastro da borda, tipo como se o pc nao memória suficiente pra rodar o programa sabe.
Poderia me dizer certihno o que faz esse invokeLater?

johnnyWiller

Então eu só uso esse invokeLater quando eu estou usando multi threads? Você tem alguma idéia para o meu problema?

johnnyWiller

Cara só que não tem como ser isso pois aqui em casa funciona direitinho… De qualquer modo aqui esta o código da tela principal, se você desejar olhar…

private void initialize() {

		UIManager.put("Button.select", new Color(102, 153, 153));

		frmSrrSistema = new JFrame();	
		frmSrrSistema.setTitle("Bib Escolar");
		frmSrrSistema.setMinimumSize(new Dimension(650, 500));
		frmSrrSistema.setSize(800,600);
		frmSrrSistema.setLocationRelativeTo(null);
		frmSrrSistema.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frmSrrSistema.getContentPane().setLayout(new BorderLayout(0, 0));

		cursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
		frmSrrSistema.setCursor(cursor);

		menuBar = new JMenuBar();
		frmSrrSistema.setJMenuBar(menuBar);

		mnCadastros = new JMenu("Biblioteca");
		menuBar.add(mnCadastros);

		mntmRecurso = new JMenuItem("Sobre");
		mntmRecurso.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0));
		mntmRecurso.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				new Sobre();

			}
		});

		mnCadastros.add(mntmRecurso);

		mntmConfigMySQL = new JMenuItem("Configuração MySQL");
		mnCadastros.add(mntmConfigMySQL);
		mntmConfigMySQL.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new ConfigMySQL();
			}
		});

		separator1 = new JSeparator();
		mnCadastros.add(separator1);

		mntmSair = new JMenuItem("Sair");
		mntmSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				closeApplication();
			}
		});
		mnCadastros.add(mntmSair);

		mnAlunos = new JMenu("Alunos");
		menuBar.add(mnAlunos);

		mntmNovoAluno = new JMenuItem("Novo Aluno");
		mntmNovoAluno.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new CadastroAluno(connection);
			}
		});
		mnAlunos.add(mntmNovoAluno);

		mntmPesquisarAluno = new JMenuItem("Pesquisar Aluno");
		mntmPesquisarAluno.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new PesquisarAluno(connection);
			}
		});
		mnAlunos.add(mntmPesquisarAluno);

		mnLivro = new JMenu("Livro");
		menuBar.add(mnLivro);

		mntmReservarLivro = new JMenuItem("Reservar");
		mntmReservarLivro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new ReservarLivro(connection);
			}
		});
		mnLivro.add(mntmReservarLivro);

		mntmNovoLivro = new JMenuItem("Novo");
		mntmNovoLivro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new CadastrarLivro(connection);
			}
		});
		mnLivro.add(mntmNovoLivro);

		mntmPesquisarLivro = new JMenuItem("Pesquisar");
		mntmPesquisarLivro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new PesquisarLivro(connection);
			}
		});
		mnLivro.add(mntmPesquisarLivro);

		mnRevistas = new JMenu("Revistas");
		menuBar.add(mnRevistas);

		mntmReservar = new JMenuItem("Reservar");
		mntmReservar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new ReservarLivro(connection);
			}
		});
		mnRevistas.add(mntmReservar);

		mntmNovo = new JMenuItem("Novo");
		mntmNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new CadastrarRevista(connection);
			}
		});
		mnRevistas.add(mntmNovo);

		mntmPesquisar = new JMenuItem("Pesquisar");
		mntmPesquisar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new PesquisarRevista(connection);
			}
		});
		mnRevistas.add(mntmPesquisar);

		mnRelatorios = new JMenu("Outros");
		menuBar.add(mnRelatorios);

		mntmUsuariosCadastrados = new JMenuItem("Pesquisa de Editoras");
		mntmUsuariosCadastrados.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new PesquisaEditora(connection, null);
			}
		});
		mnRelatorios.add(mntmUsuariosCadastrados);

		mntmLivrosCadastrados = new JMenuItem("Pesquisa de Autores");
		mntmLivrosCadastrados.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new PesquisaAutor(connection, null);
			}
		});
		mnRelatorios.add(mntmLivrosCadastrados);
		
		mntmPesquisaDisciplinas = new JMenuItem("Pesquisa Disciplinas");
		mntmPesquisaDisciplinas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new PesquisaDisciplinas(connection);		
			}
		});
		mnRelatorios.add(mntmPesquisaDisciplinas);

		toolBar = new JToolBar();
		toolBar.setFloatable(false);
		frmSrrSistema.getContentPane().add(toolBar, BorderLayout.NORTH);

		btnReserva = new JButton("");
		btnReserva.setToolTipText("Reserva");
		btnReserva.setIcon(new ImageIcon("imgs/Reserva.png"));
		toolBar.add(btnReserva);

		
		btnReserva.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {

				new ReservarLivro(connection);

			}
		});

		btnSair = new JButton("");
		btnSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				closeApplication();
			}
		});
		btnSair.setToolTipText("Sair");
		btnSair.setIcon(new ImageIcon("imgs/Sair.png"));
		toolBar.add(btnSair);

		panel_1 = new JPanelPadrao();

		frmSrrSistema.getContentPane().add(panel_1, BorderLayout.CENTER);
		panel_1.setLayout(new BorderLayout(0, 0));

		JPanel panel = new JPanel();
		panel_1.add(panel, BorderLayout.WEST);
		panel.setOpaque(false);


		GridBagLayout gbl_panel = new GridBagLayout();

		gbl_panel.columnWidths = new int[]{33, 0};
		gbl_panel.rowHeights = new int[]{45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45};		
		gbl_panel.columnWeights = new double[]{0.0, Double.MIN_VALUE};
		gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
		panel.setLayout(gbl_panel);


		btnLivrosAlugados = new JButtonPersonalizado("Livros Alugados");	
		btnLivrosAlugados.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new ReservarLivro(connection);
			}
		});
		btnLivrosAlugados.setText("Emprestar");
		btnLivrosAlugados.setBorderPainted(false);
		btnLivrosAlugados.setBackground(new Color(102, 204, 102));
		btnLivrosAlugados.addMouseListener(new MouseAdapterEvents(frmSrrSistema));

		GridBagConstraints gbc_btnLivrosAlugados = new GridBagConstraints();
		gbc_btnLivrosAlugados.insets = new Insets(0, 0, 5, 0);
		gbc_btnLivrosAlugados.fill = GridBagConstraints.BOTH;
		gbc_btnLivrosAlugados.gridx = 0;
		gbc_btnLivrosAlugados.gridy = 2;
		panel.add(btnLivrosAlugados, gbc_btnLivrosAlugados);


		btnPesquisarUsuario = new JButtonPersonalizado("Pesquisar Usuario");
		btnPesquisarUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new PesquisarAluno(connection);
			}
		});
		btnPesquisarUsuario.setText("Pesquisar Aluno");
		btnPesquisarUsuario.setBorderPainted(false);
		btnPesquisarUsuario.setBackground(new Color(102, 204, 102));
		btnPesquisarUsuario.addMouseListener(new MouseAdapterEvents(frmSrrSistema));


		btnPesquisarLivro = new JButtonPersonalizado("Pesquisar Livro");	
		btnPesquisarLivro.setBorderPainted(false);
		btnPesquisarLivro.setBackground(new Color(102, 204, 102));
		btnPesquisarLivro.addMouseListener(new MouseAdapterEvents(frmSrrSistema));
		btnPesquisarLivro.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				new PesquisarLivro(connection);
			}
		});

		GridBagConstraints gbc_btnPesquisarLivro = new GridBagConstraints();
		gbc_btnPesquisarLivro.fill = GridBagConstraints.BOTH;
		gbc_btnPesquisarLivro.insets = new Insets(0, 0, 5, 0);
		gbc_btnPesquisarLivro.gridx = 0;
		gbc_btnPesquisarLivro.gridy = 3;
		panel.add(btnPesquisarLivro, gbc_btnPesquisarLivro);

		GridBagConstraints gbc_btnPesquisarUsuario = new GridBagConstraints();
		gbc_btnPesquisarUsuario.fill = GridBagConstraints.BOTH;
		gbc_btnPesquisarUsuario.insets = new Insets(0, 0, 5, 0);
		gbc_btnPesquisarUsuario.gridx = 0;
		gbc_btnPesquisarUsuario.gridy = 4;
		panel.add(btnPesquisarUsuario, gbc_btnPesquisarUsuario);


		btnSair_1 = new JButtonPersonalizado("Sair");		
		btnSair_1.setBackground(new Color(102, 204, 102));
		btnSair_1.setBorderPainted(false);
		btnSair_1.addMouseListener(new MouseAdapterEvents(frmSrrSistema));
		btnSair_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				frmSrrSistema.dispose();

			}
		});

		frmSrrSistema.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosed(WindowEvent arg0) {
				// TODO Auto-generated method stub
				stopConnection();
				System.exit(0);
			}

		});

		btnCadastrarUsuario = new JButtonPersonalizado("Cadastrar Usuario");
		btnCadastrarUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new CadastroAluno(connection);
			}
		});
		btnCadastrarUsuario.setText("Cadastrar Aluno");
		btnCadastrarUsuario.setBorderPainted(false);
		btnCadastrarUsuario.setBackground(new Color(102, 204, 102));
		btnCadastrarUsuario.addMouseListener(new MouseAdapterEvents(frmSrrSistema));



		btnCadastrarLivro = new JButtonPersonalizado("Cadastrar Livro");		
		btnCadastrarLivro.setBorderPainted(false);
		btnCadastrarLivro.setBackground(new Color(102, 204, 102));
		btnCadastrarLivro.addMouseListener(new MouseAdapterEvents(frmSrrSistema));
		btnCadastrarLivro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new CadastrarLivro(connection);
			}
		});

		GridBagConstraints gbc_btnCadastrarLivro = new GridBagConstraints();
		gbc_btnCadastrarLivro.fill = GridBagConstraints.BOTH;
		gbc_btnCadastrarLivro.insets = new Insets(0, 0, 5, 0);
		gbc_btnCadastrarLivro.gridx = 0;
		gbc_btnCadastrarLivro.gridy = 5;
		panel.add(btnCadastrarLivro, gbc_btnCadastrarLivro);


		GridBagConstraints gbc_btnCadastrarUsuario = new GridBagConstraints();
		gbc_btnCadastrarUsuario.fill = GridBagConstraints.BOTH;
		gbc_btnCadastrarUsuario.insets = new Insets(0, 0, 5, 0);
		gbc_btnCadastrarUsuario.gridx = 0;
		gbc_btnCadastrarUsuario.gridy = 6;
		panel.add(btnCadastrarUsuario, gbc_btnCadastrarUsuario);

		GridBagConstraints gbc_btnSair_1 = new GridBagConstraints();
		gbc_btnSair_1.fill = GridBagConstraints.BOTH;
		gbc_btnSair_1.insets = new Insets(0, 0, 5, 0);
		gbc_btnSair_1.gridx = 0;
		gbc_btnSair_1.gridy = 7;
		panel.add(btnSair_1, gbc_btnSair_1);


		startConnection();
		cursor = Cursor.getDefaultCursor();
		frmSrrSistema.setCursor(cursor);
		frmSrrSistema.setVisible(true);
	}

Aqui a classe JPanelPadrao que faz um gradiente na pintura e eu uso esse JPanelPadrao no centro do frame principal

public class JPanelPadrao extends JPanel{
	
	public void paintComponent(Graphics g) {
		super.paintComponents(g);
		Graphics2D g2 = (Graphics2D) g.create();
		
		g2.setPaint(new GradientPaint(0, 0, Color.WHITE, 0, this.getHeight(), new Color(204, 255, 153)));
		g2.fillRect(0, 0, this.getWidth(), this.getHeight());
				
               g2.dispose();				
	}		
}

Aqui a classe JButtonPersonalizado que eu uso nos botões.

public class JButtonPersonalizado extends JButton implements MouseListener {
	
	boolean underMouse;
	
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		underMouse = true;
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		underMouse = false;
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	public void paintComponent(Graphics g) {
		
		super.paintComponent(g);
		Graphics g2 = g.create();
		
		g2.setColor(new Color(102, 153, 153));
		if (underMouse)
			g2.fillRect(120, 0, 35, 120);
		
		g2.dispose();
	}
	
	public JButtonPersonalizado(String texto) {
		
		this.setText(texto);
		this.addMouseListener(this);
	}
	
}
WellingtonRamos

Precisaria ver todo o código para saber o que pode ser…

Não há muito truque não. Tem que fazer “direito”.

Você entende o que essa chamada que você postou faz?

WellingtonRamos

Você joga essa execução para uma fila controlada pela “AWT event dispatching thread” (que eu apelidei de “thread do swing”) enfileirando as chamadas de eventos do Swing (se não enfileirar, pode ocorrer deadlocks). É especialmente útil quando a thread corrente não é essa “thread do swing” (testável pelo método isEventDispatchThread() ) e precisa “desenhar” algo na tela.

Quando falo em “desenhar”, significa mudar QUALQUER coisa na interface visual, desde exibir um componente, escrever um texto num textfield, até mudar as cores de um painel.

http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)

WellingtonRamos

johnnyWiller:
Então eu só uso esse invokeLater quando eu estou usando multi threads? Você tem alguma idéia para o meu problema?
Essa é a questão…
Você está trabalhando multithread mas não percebe.

De qualquer forma, sem ver o código, só suposições.
Pode ser falta de revalidates/repaints, atualizações da interface sendo executadas fora da “thread do swing”, entre outros.

Criado 1 de março de 2013
Ultima resposta 2 de mar. de 2013
Respostas 6
Participantes 2