Como fazer esse fundo na aplicação? (imgs)

11 respostas
tiagomac

Olá pessoal,

Talvez vocês possam me ajudar com essa dúvida que tem me consumido horas de pesquisa sem resultados :(!
Então, eu quero fazer uma aplicação com um fundo semelhante ao do MSN e do novo Office, tirar um pouco aquela coisa monotona, apenas branca etc…
eu achei um L&F muito bom, chamado Synthetica, e to usando ele na minha aplicação, ele tem exatamente o fundo que eu preciso… mas não to acertando aplicar, não sei se o synthetica suporta que ele seja aplicado também, abrindo o arquivo .jar do L&F eu vi que tem arquivos .png para background do rootpane, que seria o que eu preciso… mas procurei, e como procurei… e não achei nada a respeito :(! então resolvi passar por aqui…

segue a imagem de como eu gostaria que ficasse o fundo da aplicação:

Nessa imagem eu utilizei um JMenu cobrindo toda aplicação, o que resultaria exatamente no que eu quero (em termos do gráfico)… mas eu não posso adicionar nada em cima de um JMenu, nem mesmo com Layer (tentei aqui e não obtive resultado…)

assim é como a aplicação fica se eu não extendo o JMenu:

justamente o que eu não quero, um fundo apático, sem graça :!

bom, é isso, se eu não me expliquei direito avisa que eu posso tentar explicar melhor… o problema é que eu não sei nem se o que eu to querendo fazer existe nome ainda definido mas é facilmente notado em programas como o MSN que tem um fundo c/ uma imagem que quando da um “Strech” na aplicação ela não deforma, mas segue o modelo, usando o JMenu ampliado ele também segue o modelo… a questão é que não posso usar nada em cima de um JMenu, dai to procurando algum outro meio de fazer isso… qualquer informação, ajuda… é muito bem vinda.

Muito grato,
Abraços.

11 Respostas

lina

Oi,
L&F Synthetica ?

poderia me dar alguma informação sobre ele?!

eu não consegui ver suas imagens… pode postar novamente?!

tchauzin!

tiagomac

lina:
Oi,
L&F Synthetica ?

poderia me dar alguma informação sobre ele?!

eu não consegui ver suas imagens… pode postar novamente?!

tchauzin!


Segue o dite dele: http://www.javasoft.de/jsf/public/products/synthetica

também escrevi uma nota pequena sobre ele no meu blog: http://thingson.blogspot.com/2007/05/synthetica-look-and-feel.html

As imgs estão carrendo aqui sem problema, o link para a primeira é: http://img511.imageshack.us/img511/1051/blackmoonou2.jpg e para a segunda: http://img150.imageshack.us/img150/2976/semmenuge7.jpg

vlw, abraços.

rissato

faz assim… coloca um JLabel do tamanho do seu frame com a imagem do seu fundo nele. Ai vc adiciona os objetos por cima. :slight_smile:

rissato

Aliás, ótimo L&F. Um dos que eu mais gostei até hj. XD

H

tive esse msm problema, to levando pau p colocar img de fundo…falaram em jLabel, mas jLabel n dx por componentes em cima…

alguem sabe se existe outra solucao mais pratica?

L

eu implementei essa classe…
deve ajudar:

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;

import javax.swing.border.Border;
 
public class FundoSistema implements Border {
    private final BufferedImage imagem;
 
    public FundoSistema() {

                BufferedImage fundo = null;
	try {
		fundo = ImageIO.read(new File("grafico/imagens/fundo.png"));
	} catch (IOException e1) {
		e1.printStackTrace();
	}

                this.imagem = fundo;
    }
 
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
        // No Centro
    	int x0 = x + (width-imagem.getWidth())/2;
        int y0 = y + (height-imagem.getHeight())/2;
    	
    	g.drawImage(imagem, x0, y0, null);
    }
 
    public Insets getBorderInsets(Component c) {
        return new Insets(0,0,0,0);
    }
 
    public boolean isBorderOpaque() {
        return true;
    }
}

e seto a borda no jpanel:

panel.setBorder(new FundoSistema());

espero que ajude vcs!

H

mto bom, pegou msm.

agora convenhamos, gosto mto de java, mas tem q melhorar essas coisas basicas, q fazem a pessoa perder mto tempo :confused:

W

hlds:
mto bom, pegou msm.

agora convenhamos, gosto mto de java, mas tem q melhorar essas coisas basicas, q fazem a pessoa perder mto tempo :/

acho que voce esta se referindo a IDE e nao a linguagem, que normalmente ja faz isso por baixo dos panos =p

alias mt bom o L&F vo guarda aqui pra mim …

H

WillyKocher:
hlds:
mto bom, pegou msm.

agora convenhamos, gosto mto de java, mas tem q melhorar essas coisas basicas, q fazem a pessoa perder mto tempo :/

acho que voce esta se referindo a IDE e nao a linguagem, que normalmente ja faz isso por baixo dos panos =p

alias mt bom o L&F vo guarda aqui pra mim …

custava ter 1 metodo setBackground(image)? um metodo direto (se eh q ja n existe), acho q a complicacao seria no framework swing sim e n na ide.

Luiz_Rocha

Ola.

Não sei se ainda é tempo de responder, mas posso te dar umas dicas.

A única maneira em que eu consegui desenhar uma imagem no fundo de um container foi criar uma subclasse de Container e nela sobrescrever o método paintComponent. Por exemplo, você pode fazer a classe MyPanel extends JPanel.

Eu to te enviando um pequeno projeto Eclipse onde eu fiz uma janela com dois painéis e um botão, todos com o método paintComponent sobrescrito.

Mas, claro, você não precisa desenhar no fundo uma imagem. Se usar a classe Graphics2D dentro do metodo paintComponent podera obter um bom resultado, pois ela tem um metodo para fazer desenhos com graduações de cores.

Eis aqui um trecho que pode dar certo:

Graphics2D g2 = (Graphics2D) g;
		g2.setPaint(new GradientPaint(0,0,
				Color.BLACK,
				(this.getSize().width/2),
				0,
				Color.GRAY,
				true));
		g2.fill(new Rectangle2D.Double(0,0,
				this.getSize().width,
				this.getSize().height));

coloque isso dentro do seu paintComponent. Não esqueça de chamar super.paintComponent antes de tudo no seu método.

Infelizmente isso tem um efeito colateral. Nas minhas janelas onde fiz algo assim os componentes somem ao se redimensionar a janela…

Luiz_Rocha

Aproveitando a deixa…

Vocês que usam o Synthetica L&F poderiam me ajudar numa coisa:

Como eu faço para “evaluar” minha cópia? O site deles é meio confuso - ou EU estava meio confuso - e toda vez que eu rodo minhas janelas aparece um desagradável label debaixo delas dizendo em ingês “cópia não registrada”.

Também, quando eu tento transformar meu projeto (com o Synthetica dentro) num .jar, ele não roda de jeito nenhum, e creio ser pela mesma causa.

Como eu faço pra acabar com isso?

Criado 10 de maio de 2007
Ultima resposta 26 de dez. de 2007
Respostas 11
Participantes 7