Olá, o povo aqui já deve tá de saco cheio de gente perguntando como colocar imagem de fundo em um JPanel, e em todos os tópicos deste sempre recomendaram a biblioteca towel, baixei um .jar 1.2.2 no github mas não sei como usá-lo, como faço pra importar - visto que não existe uma “pasta de libs java” - o arquivo para que assim fique disponível pra qualquer projeto?
e como usá-la?
Boa tarde amigo primeiramente vc gera o .JAR da biblioteca e importa no seu projeto ou se desejar importa o projeto assim ele gera o .JAR automaticamente, após isso é só fazer o bom uso da lib.
um exemplo simples.
AnnotationResolverresolver=newAnnotationResolver(Pessoa.class);finalObjectTableModel<Pessoa>tableModel=newObjectTableModel<Pessoa>(resolver,"nome:Nome,cpf:Cpf,estado:Estado");publicvoidcarrega_table(){tableModel.setData(getDados());table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);table.setAutoResizeMode(table.AUTO_RESIZE_OFF);TableCellRendererrenderer=newMyCellRenderer();table.setDefaultRenderer(Integer.class,renderer);table.setDefaultRenderer(Double.class,renderer);table.setDefaultRenderer(Object.class,renderer);table.setDefaultRenderer(Date.class,renderer);// table.setDefaultRenderer(Boolean.class, renderer);table.setModel(tableModel);table.getColumnModel().getColumn(0).setPreferredWidth(100);table.getColumnModel().getColumn(1).setPreferredWidth(250);table.getColumnModel().getColumn(2).setPreferredWidth(100);}// Just for create a default List to show.privateList<Pessoa>getDados(){List<Pessoa>list=newArrayList<Pessoa>();try{for(inti=0;i<=10;i++){Pessoapp=newPessoa();pp.setNome("Pessoa"+i);pp.setCpf("Cpf"+i);if(i/2!=0){pp.setEstado(true);}list.add(pp);}}catch(Exceptione){// TODO: handle exceptione.printStackTrace();}returnlist;}
junto ao projeto Towel tem muitos outros exemplos só da uma estuda nele blz.
R
Ruan_Alex
já baixei o .jar do towel e já importei pro meu projeto.
Eu tenho uma JFrame principal que quando compilo o java ele carrega, e é justamente esse JFrame que eu quero inserir a imagem, mas quero saber em que parte da minha função eu uso a função do towel?
Inclusive eu tinha colocado ela mas toda vez que mandava executar aparecia dois JFrame, o meu normal e o do towel carregando as imagens, então deixei comentando a parte em que uso a JImagePanel, como resolve isso?
Minha função principal do JFRame
packageGui;importjava.awt.Dimension;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;importcom.towel.swing.img.JImagePanel;importjavax.swing.JFrame;importjavax.swing.JOptionPane;/** * * @author Ruan-Alex */publicclassMain_Interfaceextendsjavax.swing.JFrame{/** * Creates new form Main_Interface */publicMain_Interface(){initComponents();/*try { JImagePanel panel = new JImagePanel(10, new BufferedImage[] { loadImage("C:\\\\Users\\\\Ruan-Alex\\\\Downloads\\\\content_gatinho.jpg"), loadImage("C:\\\\Users\\\\Ruan-Alex\\\\Downloads\\\\pirata.jpg"), loadImage("C:\\\\Users\\\\Ruan-Alex\\\\Downloads\\\\india.jpg")}); JFrame frame = new JFrame(); frame.setPreferredSize(new Dimension(718, 545)); frame.add(panel); frame.setJMenuBar(jMenuBar1);//.add(jMenuBar1); frame.pack(); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } catch(IOException e) { JOptionPane.showMessageDialog(null, "Erro ao gerar tela inicial: " + e); }*/setLocationRelativeTo(null);}privatestaticBufferedImageloadImage(Stringfile)throwsIOException{returnImageIO.read(newFile(file));}/** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code"> privatevoidinitComponents(){jMenuBar1=newjavax.swing.JMenuBar();Arquivo=newjavax.swing.JMenu();Agenda_Cad=newjavax.swing.JMenuItem();Cadastro=newjavax.swing.JMenu();Clien_Cad=newjavax.swing.JMenuItem();Func_Cad=newjavax.swing.JMenuItem();Serv_Cad=newjavax.swing.JMenuItem();Consultas=newjavax.swing.JMenu();Agen_Consu=newjavax.swing.JMenuItem();Clien_Consu=newjavax.swing.JMenuItem();Func_Consu=newjavax.swing.JMenuItem();Sair=newjavax.swing.JMenuItem();Editar=newjavax.swing.JMenu();Excluir=newjavax.swing.JMenu();Clien_Exc=newjavax.swing.JMenuItem();Func_Exc=newjavax.swing.JMenuItem();Ajuda=newjavax.swing.JMenu();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setTitle("Salão de Beleza - Que Charme!");setResizable(false);getContentPane().setLayout(null);Arquivo.setText("Arquivo");Agenda_Cad.setText("Agendar Serviço");Agenda_Cad.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){Agenda_CadActionPerformed(evt);}});Arquivo.add(Agenda_Cad);Cadastro.setText("Cadastro");Clien_Cad.setText("Cliente");Clien_Cad.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){Clien_CadActionPerformed(evt);}});Cadastro.add(Clien_Cad);Func_Cad.setText("Funcionário");Func_Cad.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){Func_CadActionPerformed(evt);}});Cadastro.add(Func_Cad);Serv_Cad.setText("Serviços");Serv_Cad.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){Serv_CadActionPerformed(evt);}});Cadastro.add(Serv_Cad);Arquivo.add(Cadastro);Consultas.setText("Consultas");Agen_Consu.setText("Agenda");Agen_Consu.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){Agen_ConsuActionPerformed(evt);}});Consultas.add(Agen_Consu);Clien_Consu.setText("Cliente");Clien_Consu.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){Clien_ConsuActionPerformed(evt);}});Consultas.add(Clien_Consu);Func_Consu.setText("Funcionário");Func_Consu.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){Func_ConsuActionPerformed(evt);}});Consultas.add(Func_Consu);Arquivo.add(Consultas);Sair.setText("Sair");Sair.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){SairActionPerformed(evt);}});Arquivo.add(Sair);jMenuBar1.add(Arquivo);Editar.setText("Editar");Excluir.setText("Excluir");Clien_Exc.setText("Cliente");Excluir.add(Clien_Exc);Func_Exc.setText("Funcionário");Excluir.add(Func_Exc);Editar.add(Excluir);jMenuBar1.add(Editar);Ajuda.setText("Ajuda");jMenuBar1.add(Ajuda);setJMenuBar(jMenuBar1);setBounds(0,0,718,545);}// </editor-fold> privatevoidClien_CadActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:Cadastro_Clienteobj=newCadastro_Cliente();obj.setVisible(true);this.setVisible(false);}privatevoidFunc_CadActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:Cadastro_Funcionarioobj=newCadastro_Funcionario();obj.setVisible(true);this.setVisible(false);}privatevoidServ_CadActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:Cadastro_Servicosobj=newCadastro_Servicos();obj.setVisible(true);this.setVisible(false);}privatevoidSairActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:System.exit(0);}privatevoidAgenda_CadActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:Cadastro_Agendaobj=newCadastro_Agenda();obj.setVisible(true);this.setVisible(false);}
V
ViniGodoy
O JImagePanel é equivalente a um JPanel. Então, use-o como se fosse um JPanel, exatamente igual você faria.
Por exemplo, se você quer que ele fique no fundo de todos os seus componentes, adicione ele ao JFrame e os componentes nele.
O outro JFrame que está aparecendo não é o do Towel, é o JFrame que você declarou e criou nas linhas 31 até 38 do código que você postou. Ao invés de criar esse frame a mais, use o JImagePanel no seu próprio JFrame.
R
Ruan_Alex
ViniGodoy:
O JImagePanel é equivalente a um JPanel. Então, use-o como se fosse um JPanel, exatamente igual você faria.
Por exemplo, se você quer que ele fique no fundo de todos os seus componentes, adicione ele ao JFrame e os componentes nele.
O outro JFrame que está aparecendo não é o do Towel, é o JFrame que você declarou e criou nas linhas 31 até 38 do código que você postou. Ao invés de criar esse frame a mais, use o JImagePanel no seu próprio JFrame.
O problema é que não to entendendo como fazer isso em código.
Eu apago as linhas de código do 31 a 38, é isso?
EDIT:
Comentei as linhas de 31 a 38, o outro JFrame não aparece mais, mas e agora como faço pra usar o JImagePanel que já declarei ser usado pelo JFrame atual?
R
Resplandes
Eu tenho o método o qual faço essa manipulação ai chamo o mesmo no construtor do meu JFrame
//Metodo que redefine uma imagem no panelprivatevoidsetar_imagem_de_fundo(){imagePanel.setBorder(newEtchedBorder(EtchedBorder.RAISED,null,null));// Seta a cor de fundo para azul marinho// imagePanel.setBackground(new Color(176, 196, 222));try{// busca o plano de fundoBufferedImageimg=ImageIO.read(View_Menu_Principal.class.getResource("/br/com/jimagepanel/img/imagem_fundo.png"));// seta o plano de fundo no sistamaimagePanel.setImage(img);// Centraliza a imagemimagePanel.setStyle(JXImagePanel.Style.CENTERED);// Redimenciona a imagem para o tamanho da tela//imagePanel.setStyle(JXImagePanel.Style.SCALED);// Redimenciona a imagem para o tamanho da tela 2//imagePanel.setStyle(JXImagePanel.Style.TILED);}catch(Exceptione){e.printStackTrace();}}
Lembrando esse método faz uso do SwingX com o componente JXImagePanel
R
Ruan_Alex
@Resplandes
Cara sei que vc tá tentando ajudar, mas vc tá me confundindo ainda mais, nunca vi esse JXImagePanel!
V
ViniGodoy
Você faria isso no initComponents. Esse código é automaticamente gerado pelo Netbeans?
R
Ruan_Alex
Sim, é gerado automaticamente pelo netbeans e não posso alterá-lo, já que toda essa minha classe é um Form Jframe.
E agora como faço? =/
V
ViniGodoy
Não conheço o construtor visual do Netbeans, pois uso outras IDEs.
R
Ruan_Alex
Dei umas pesquisadas e resolvi usar o eclipse com o WindowsBuilder, realmente o código fica mais limpo e consegui usar o Towel com no meu JFrame, infelizmente já está em cima da hora pra eu refazer tudo.
Enfim, vlw pela ajuda, tópico encerrado.