Leopcx
Setembro 28, 2021, 4:46am
#1
Não consigo fazer um JLabel receber a captura de um ObjectInputStream.
Podem me ajudar!!!
public void recebeTexto(JLabel img_text) {
new Thread() {
@SuppressWarnings("resource")
public void run() {
try{
in = new ObjectInputStream(socket.getInputStream());
System.out.println(“lendo socket do servidor”);
System.out.println(in.readObject()); //esse imprime
img_text.setText(in.readObject().toString()); //esse não imprime
Provavelmente só tem um objeto pra ser lido no seu InputStream
mas você está tentando ler um segundo objeto, afinal, está chamando o in.readObject()
duas vezes.
Utilize uma variável local para armazenar o objeto lido.
in = new ObjectInputStream(socket.getInputStream());
System.out.println("lendo socket do servidor");
Object objetoLido = in.readObject();
System.out.println(objetoLido); //esse imprime
img_text.setText(objetoLido.toString()); //esse exibe no JLabel
Leopcx
Setembro 28, 2021, 1:47pm
#3
top…vcs são fera brother…
Agradeço a família GUJ…
até mais!!!
1 curtida
Leopcx
Outubro 7, 2021, 3:35am
#4
agora me encontro em outro problema…
estou tentando lançar um label em um JList…
acontece o mesmo problema acima…
alguma parte se renova e não consigo perceber…
tenho este método que traz a imagem e o email do banco
public static JList exibiImageList(byte[] minhaimagem,String email, javax.swing.JList label) throws IOException
{
DefaultListModel<Object> list = new DefaultListModel<Object>();
InputStream input = new ByteArrayInputStream(minhaimagem);
BufferedImage imagem = ImageIO.read(input);
ImageIcon icon = new ImageIcon(imagem);
Image img = icon.getImage().getScaledInstance(25, 25, 25);
list.addElement(new ImageIcon(img));
list.addElement(email);
label.setModel(list);
return label;
}
Leopcx
Outubro 7, 2021, 3:37am
#5
e chamo este método assim por um botão:
Chat_Dao dao = new Chat_Dao();
ArrayList<Cliente> cliente = new ArrayList<Cliente>();
cliente = (ArrayList<Cliente>) dao.BuscarTodos();
for(Cliente cli : cliente) {
try {
ManipularImagem.exibiImageList(cli.getImagem(),cli.getEmail(), Cliente_Principal.list);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
Leopcx
Outubro 7, 2021, 3:38am
#6
parece carma…só aparece o ultimo registro…
ja rodei tudo e nada…
por favor me ajudem…
estou com prazo para este projeto…vlwwwww
É que a cada chamada ao método exibiImageList
você está setando um novo ListModel
para o seu JList
.
Leopcx
Outubro 7, 2021, 2:45pm
#8
tinha reparado ontem.
será que posso fazer assim:
public static JList exibiImageList(byte[] minhaimagem,String email, javax.swing.JList label, ```
DefaultListModel list) throws IOException
{
Leopcx
Outubro 7, 2021, 2:56pm
#9
Executou de boa…ontem eu levei esse método para outra classe e
coloquei a variável no topo e funcionou…
vlw meu brother…obrigado.
Leopcx
Outubro 7, 2021, 10:36pm
#10
o grande problema que encontrei foi a posição da imagem com as
Strings do banco.Não tem como adicionar 2 elementos na mesma posição
do JList, só assim:
list.addElement(String);
list.addElement(imagem);
Tem sim, pra isso você precisa implementar um ListCellRenderer
.
Leopcx
Outubro 8, 2021, 4:23pm
#12
sim…oque eu consegui só manda a mesma imagem para todos os emails
Leopcx
Outubro 8, 2021, 4:25pm
#13
pode me ajudar com isso.
eu usei ese método:
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
tem como usar outra maneira???
Posta o código completo de suas classes, não tem como adivinhar a forma que você implementou.
Leopcx
Outubro 8, 2021, 5:12pm
#15
public class ActionListCellRenderer implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
//aki não consigo trazer imagem do banco só por URLs
JLabel label= new JLabel());
//Define o texto do JLabel
label.setText(value.toString());
// if(isSelected)
// label.setHorizontalAlignment(SwingConstants.CENTER);
// else
label.setHorizontalAlignment(SwingConstants.LEFT);
//Retorna o Label
return label;
}
}
Ao invés de ficar adicionando String
, faz o seu JList
renderizar sua coleção de objetos Cliente
.
Sugiro utilizar seu próprio ListModel
para isso, DefaultListModel
só é legal para conteúdo estático.
Aí no seu renderer o parâmetro value
vai ser um objeto do tipo Cliente
e você vai obter a imagem dele.
Leopcx
Outubro 8, 2021, 6:00pm
#17
tipo assim?
ListModel lista = new ListModel() {
@Override
public int getSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Cliente getElementAt(int index) {
// TODO Auto-generated method stub
return null;
}
@Override
public void addListDataListener(ListDataListener l) {
// TODO Auto-generated method stub
}
@Override
public void removeListDataListener(ListDataListener l) {
// TODO Auto-generated method stub
}
};
//JList
list = new JList<Cliente>(lista);
Leopcx
Outubro 8, 2021, 6:30pm
#20
o problema disso é que a imagem vem como BINARY DATA
e eu converto ela num método!!!e agora???
Leopcx:
a imagem fica assim
Como está implementado o seu Renderer?
Provavelmente você precisa setar o preffered-size do componente utilizado para renderizar a imagem.