09. december 2003 - 17:25
Der er
2 kommentarer og
1 løsning
JList og Baggrundsbillede
Hej!
Er det muligt at have et billede liggende bag en JList som en slags baggrundsbillede.
Jeg ved godt man ikke kan sætte selve billedet på JListen, men jeg tænkte på om man kunne gøre den transperant og have f.eks. et imageicon liggende bagved?
Er der nogen som kan give et eksempel?
På forhånd mange tak!
09. december 2003 - 18:16
#3
Det kan faktisk godt lade sig gøre...
prøv følgende:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Test extends JFrame {
private JList dataList;
private JScrollPane scrollPane;
public Test() {
//JPanel content = new JPanel();
//content.setLayout(null);
getContentPane().setLayout(null);
//getContentPane().add(content);
((JPanel) getContentPane()).setOpaque(false);
URL bgImage = getClass().getClassLoader().getResource("bg.jpg");
final ImageIcon m_image = new ImageIcon(bgImage);
final int winc = m_image.getIconWidth();
final int hinc = m_image.getIconHeight();
JPanel backPanel = new JPanel();
//JLabel backlabel = new JLabel("");
/* add datalist */
dataList = new JList(new Object[] { "this", "is", "a", "test" });
dataList.setOpaque(false);
//dataList.setSelectionBackground(new Color(1.0f, 1.0f, 1.0f, 0.6f));
dataList.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.6f));
dataList.setFont(new Font("Arial", Font.PLAIN, 10));
scrollPane = new JScrollPane(dataList);
scrollPane.setSize(new Dimension(165, 60));
scrollPane.setLocation(75, 10);
scrollPane.setOpaque(false);
scrollPane.getViewport().setOpaque(false);
//scrollPane.getViewport().setBackground(
//new Color(1.0f, 1.0f, 1.0f, 0.6f));
getContentPane().add(scrollPane);
if (m_image.getIconWidth() > 0 && m_image.getIconHeight() > 0) {
backPanel = new JPanel(){
public void paintComponent(Graphics g ){
super.paintComponent(g);
int w = getParent().getWidth();
int h = getParent().getHeight();
//m_image.paintIcon(this, g, 0,0);
for (int i=0;i<h+hinc;i=i+hinc)
for (int j=0;j<w+winc;j=j+winc)
m_image.paintIcon(this,g,j,i);
}
/* public Dimension getPreferredSize(){
return new Dimension(super.getSize());
}
public Dimension getMinimumSize() {
return getPreferredSize();
}*/
};
}
getLayeredPane().add( backPanel, new Integer( Integer.MIN_VALUE ) );
backPanel.setBounds(0, 0, 5000, 5000);
setSize(250, 100);
setVisible(true);
}
public static void main(String[] args) {
Test w = new Test();
w.setBounds(200, 200, 400, 200);
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
w.show();
}
}
Gør nøjagtig hvad du spørger efter...
Du ændre selvfølgelig bare "bg.jpg" til dit baggrundsbillede...