Em Java Swing como você pode gerenciar uma lista de painéis permitindo que vários painéis a serem selecionados?

StackOverflow https://stackoverflow.com/questions/378161

  •  22-08-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando em um aplicativo in-house que acompanha um grupo de tarefas. Eu queria ter um monitor de tarefa simples que iria listar o nome da tarefa e status da tarefa. Eu preciso disso para olhar apenas um pouco de bom, eu não sou designer assim que o que eu faço é ir para sugar, mas um display de texto básico não vai funcionar para os requisitos do projeto.

O que estou tentando essencialmente fazer é mostrar algo semelhante a janela de download do Firefox, a janela de download do I-Tunes, e bem que eu poderia citar mais, mas todos eles parecem basicamente o mesmo. Em cada um desses aplicativos, cada um dos painéis de progresso "é selecionável. Assim, para implementar isso eu pensei que seria simples de usar apenas uma lista de JPanels cada um com uma JProgressBar e um JLabel, cada um dos quais pode apenas aceitar o foco para determinar se ele e os outros são selecionados. Eu pensei que este ia ser uma tarefa fácil, mas se eu usar um JList ele apenas exibe texto. então eu percebi que eu iria mostrar todos os painéis de tarefas em um painel maior, mas eu não posso obter os painéis internos para reconhecer o foco.

Existe um padrão para isso? Existe uma solução padrão rolou que eu simplesmente não ter encontrado? Ou há um método melhor para fazer isso? Eu não quero reinventar a roda, mas eu pensei que este foi apenas vai ser simples.

Foi útil?

Solução

Parece que você pode estar procurando é uma JList .

Você pode adicionar seus itens para o JList de pelo primeiro adicionando seu "tarefa" para o objeto JList ListModel (veja o seção Criar um Modelo com os tutoriais de Java), e então você vai querer atribuído um costume ListCellRenderer que irá aceitar a sua 'missão' e tornar a JList como um JPanel na própria lista. A chave aqui é fazer o seu ListCellRenderer costume ser capaz de exibir a sua "tarefa" no JList a maneira que você quiser tê-lo mostrar na JList.

Dê uma olhada na escrever um renderizador de célula personalizado seção dos Como usar listas página dos tutoriais Java. Ele irá descrever como fazer o seu ListCellRenderer personalizado para que possa representar sua "tarefa" como qualquer coisa que você quiser.

Para mantê-lo curto, você vai implementar o ListCellRenderer Interface implementando a getListCellRendererComponent que retornará a Component que é a representação de sua tarefa na JList. Você provavelmente vai querer quer construir ou instanciar o seu JPanel neste método e devolvê-lo como o Component.

Outras dicas

A maneira padrão de fazer este tipo de coisas é usar JTable (ou JList) como um recipiente.

Você não tem que usar renderes padrão fot células da tabela, mas você pode especificar o seu próprio representante para células específicas. Dê uma olhada na CellRenderer

Como cerca de um JTable (que você pode definir para permitir várias linhas a serem selecionados) com um JPanel interna ocupando a única célula em cada linha, que contém uma JProgressBar e uma JLabel. Ou você poderia usar um JList com a mesma estrutura que acabei de descrever.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top