_Rock_
I'm cool cuz I Fold
Olá
Precisava de ajuda com o seguinte código. O meu objectivo é colocar uma JList com uma imagem de fundo, porque simplesmente não quero os backgrounds que aquilo tem por omissão. Inicialmente queria tornar a JList simplesmente transparente, mas rapidamente percebi que isso é impossível (pelas pesquisas que fiz). Descobri um tutorial para colocar uma imagem como fundo numa JList, mas não está a resultar comigo. (Tutorial: http://www.javarichclient.com/display-a-jlist-with-a-background-image/ )
O código compila e funciona, simplesmente o fundo da JList não se altera, permanece branco. Não sei o que estarei a fazer mal...ainda sou um novato nisto e portanto perdoem-me se tiver a incorrer em práticas más de Java.
Código:
Main da Interface:
Função UpdateOnlineList
Agradeço desde já qualquer ajuda!
_Rock_
Precisava de ajuda com o seguinte código. O meu objectivo é colocar uma JList com uma imagem de fundo, porque simplesmente não quero os backgrounds que aquilo tem por omissão. Inicialmente queria tornar a JList simplesmente transparente, mas rapidamente percebi que isso é impossível (pelas pesquisas que fiz). Descobri um tutorial para colocar uma imagem como fundo numa JList, mas não está a resultar comigo. (Tutorial: http://www.javarichclient.com/display-a-jlist-with-a-background-image/ )
O código compila e funciona, simplesmente o fundo da JList não se altera, permanece branco. Não sei o que estarei a fazer mal...ainda sou um novato nisto e portanto perdoem-me se tiver a incorrer em práticas más de Java.
Código:
Código:
public class ComplexCellRenderer extends DefaultListCellRenderer implements ListCellRenderer {
protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
private Image image;
private JScrollPane scrollPane;
private JList list;
int row = -1;
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
//Icon theIcon = null;
JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
String values = (String) value;
String[] tokens = values.split("[#]");
String Jogador = tokens[0];
String estado = tokens[1];
if(Jogador.length() < 15)
{
for(int i=Jogador.length(); i<15; i++)
Jogador = Jogador + " ";
}
String textToPrint = Jogador + estado;
if(estado.equals("Online"))
{
renderer.setForeground(Color.GREEN);
//theIcon = (Icon) values[2];
}
else if(estado.equals("A Jogar"))
{
renderer.setForeground(Color.RED);
}
//if (theIcon != null) {
//renderer.setIcon(theIcon);
//}
renderer.setText(textToPrint);
return renderer;
}
public void BackgroundImageListCellRenderer(JScrollPane scrollPane, Image image) {
this.image = image;
this.scrollPane = scrollPane;
// must use SIMPLE_SCROLL_MODE to force scrollpane to redraw the whole JList,
// otherwise scrollpane will use 'cached' images
scrollPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
// we will paint our own background
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
// compute the offset of the image we want to draw
Rectangle cellBounds = list.getCellBounds(row, row);
Point p = cellBounds.getLocation();
Point viewPosition = scrollPane.getViewport().getViewPosition();
p.x -= viewPosition.x;
p.y -= viewPosition.y;
// draw the image from the offset computed above
AffineTransform transform = AffineTransform.getTranslateInstance(-p.x, -p.y);
g2d.drawImage(image, transform, null);
// let the original renderer do its work
super.paintComponent(g);
}
}
Main da Interface:
Código:
public MainMenuUI(boolean som, String idiom, AppControler c) {
initComponents();
listOnlineFriends.setLayoutOrientation(JList.HORIZONTAL_WRAP);
listOnlineFriends.setFixedCellWidth(150);
ComplexCellRenderer renderer = new ComplexCellRenderer();
Image img = Toolkit.getDefaultToolkit().getImage(MainMenuUI.class.getResource("/apresentacao/imagens/black-canvas-fabric-texture.jpg"));
renderer.BackgroundImageListCellRenderer(onlineListScrollpane, img);
listOnlineFriends.setCellRenderer(renderer);
String[] Jogadores = {"Antonio#Online", "Joao#A Jogar"};
updateOnlineList(Jogadores);
estadoSom = som;
idioma = idiom;
capp = c;
if(idioma == "PT")
{
ToggleButtonUKFlag.setIcon(UKDesligado);
}
else
{
ToggleButtonPTFlag.setIcon(PTDesligado);
}
if(estadoSom == true)
{
ToggleButtonSom.setIcon(comSom);
}
else
{
ToggleButtonSom.setIcon(semSom);
}
}
Função UpdateOnlineList
Código:
public void updateOnlineList(String[] amigos)
{
DefaultListModel model1 = new DefaultListModel();
listOnlineFriends.setModel(model1);
ArrayList currentFriends = new ArrayList(Arrays.asList(model1.toArray()));
ArrayList newFriends = new ArrayList(Arrays.asList(amigos));
if(!currentFriends.equals(newFriends))
{
model1.removeAllElements();
for(int i=0; i<newFriends.size(); i++)
{
model1.addElement(amigos[i]);
}
}
}
Agradeço desde já qualquer ajuda!
_Rock_
Última edição: