swing-JPanel-背景图片

JPanel没有直接设置背景图片的方法。如果你想做成有背景的jpanel,需要自己继承JComponent,重载paintComponent,画出设置的壁纸。很简单代码:

问题

很显然这白的颜色太难看了,要去掉就需要这样设置一下:

/setOpaque()/如果为 true,则该组件绘制其边界内的所有像素。

jslider.setOpaque(false);

package com.swing.panel; import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.Border; import javax.swing.border.TitledBorder; public class Demo extends JFrame { private boolean isShowing; private JLabel jlabel; private JPanelWithPhoto jpanel; private JButton jbutton1; private JButton jbutton2; private JSlider jslider; private JLabel jlabel2; private JLabel jlabel3; public Demo(){ init(); } public void init(){ isShowing = false ; jlabel = new JLabel(); jlabel.setForeground(Color.red); //jlabel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Tweaking Tooltips", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), java.awt.Color.red)); jlabel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "good", TitledBorder.DEFAULT_POSITION , TitledBorder.DEFAULT_POSITION , new Font("utg-8", 0, 23), Color.green )); jlabel.setText("<html>\n<body>\n<center>\n<h2>\nPACIFIC OCEAN\n</h2>\n<p>\n<strong>\n<em>\nIt has been snowing for thousands of years!\n</em>\n</strong>\n</p>\n</center>\n</body>\n</html>"); jbutton1 = new JButton(); jbutton1.setText("begin...."); jbutton1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(isShowing == true){ jbutton1.setText("end!!!"); }else{ jbutton1.setText("begin..."); } } }); jbutton2 = new JButton(); jbutton2.setText("stop"); jbutton2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.exit(0); } }); jslider = new JSlider(); jslider.setForeground(Color.white); jslider.setMaximum(10); jslider.setMinimum(1); jslider.setValue(5); //jslider.setVisible(true); // //如果为 true,则该组件绘制其边界内的所有像素。 jslider.setOpaque(false); jlabel2 = new JLabel("less"); jlabel3 = new JLabel("more"); jpanel = new JPanelWithPhoto(new ImageIcon(this.getClass().getResource("pacific.jpg"))); //jpanel.setIcon(new ImageIcon(this.getClass().getResource("pacific.jpg"))); javax.swing.GroupLayout wallpaperPanel1Layout = new javax.swing.GroupLayout(jpanel); jpanel.setLayout(wallpaperPanel1Layout); wallpaperPanel1Layout.setHorizontalGroup( wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jlabel, javax.swing.GroupLayout.DEFAULT_SIZE, 437, Short.MAX_VALUE) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addComponent(jlabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jslider, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jlabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 65, Short.MAX_VALUE) .addComponent(jbutton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jbutton2))) .addContainerGap()) ); wallpaperPanel1Layout.setVerticalGroup( wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, wallpaperPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jlabel, javax.swing.GroupLayout.DEFAULT_SIZE, 349, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addGap(8, 8, 8) .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jbutton2) .addComponent(jbutton1))) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jslider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jlabel2) .addComponent(jlabel3)))) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); pack(); } public static void main(String args[]){ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub new Demo().setVisible(true); } }); } } 
package com.swing.panel; import java.awt.Graphics; import javax.swing.Icon; import javax.swing.JPanel; public class JPanelWithPhoto extends JPanel { private Icon icon ; public Icon getIcon() { return icon; } public void setIcon(Icon icon) { this.icon = icon; } public JPanelWithPhoto(Icon icon){ this.icon = icon ; } @Override protected void paintComponent(Graphics g) { if(icon!=null) icon.paintIcon(this, g, 0, 0); } 

}

package com.swing.panel; import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.Border; import javax.swing.border.TitledBorder; public class Demo extends JFrame { private boolean isShowing; private JLabel jlabel; private JPanelWithPhoto jpanel; private JButton jbutton1; private JButton jbutton2; private JSlider jslider; private JLabel jlabel2; private JLabel jlabel3; public Demo(){ init(); } public void init(){ isShowing = false ; jlabel = new JLabel(); jlabel.setForeground(Color.red); //jlabel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Tweaking Tooltips", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), java.awt.Color.red)); jlabel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "good", TitledBorder.DEFAULT_POSITION , TitledBorder.DEFAULT_POSITION , new Font("utg-8", 0, 23), Color.green )); jlabel.setText("<html>\n<body>\n<center>\n<h2>\nPACIFIC OCEAN\n</h2>\n<p>\n<strong>\n<em>\nIt has been snowing for thousands of years!\n</em>\n</strong>\n</p>\n</center>\n</body>\n</html>"); jbutton1 = new JButton(); jbutton1.setText("begin...."); jbutton1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(isShowing == true){ jbutton1.setText("end!!!"); }else{ jbutton1.setText("begin..."); } } }); jbutton2 = new JButton(); jbutton2.setText("stop"); jbutton2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.exit(0); } }); jslider = new JSlider(); jslider.setForeground(Color.white); jslider.setMaximum(10); jslider.setMinimum(1); jslider.setValue(5); //jslider.setVisible(true); // //如果为 true,则该组件绘制其边界内的所有像素。 jslider.setOpaque(false); jlabel2 = new JLabel("less"); jlabel3 = new JLabel("more"); jpanel = new JPanelWithPhoto(new ImageIcon(this.getClass().getResource("pacific.jpg"))); //jpanel.setIcon(new ImageIcon(this.getClass().getResource("pacific.jpg"))); javax.swing.GroupLayout wallpaperPanel1Layout = new javax.swing.GroupLayout(jpanel); jpanel.setLayout(wallpaperPanel1Layout); wallpaperPanel1Layout.setHorizontalGroup( wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jlabel, javax.swing.GroupLayout.DEFAULT_SIZE, 437, Short.MAX_VALUE) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addComponent(jlabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jslider, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jlabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 65, Short.MAX_VALUE) .addComponent(jbutton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jbutton2))) .addContainerGap()) ); wallpaperPanel1Layout.setVerticalGroup( wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, wallpaperPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jlabel, javax.swing.GroupLayout.DEFAULT_SIZE, 349, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addGap(8, 8, 8) .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jbutton2) .addComponent(jbutton1))) .addGroup(wallpaperPanel1Layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(wallpaperPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jslider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jlabel2) .addComponent(jlabel3)))) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); pack(); } public static void main(String args[]){ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub new Demo().setVisible(true); } }); } } 
package com.swing.panel; import java.awt.Graphics; import javax.swing.Icon; import javax.swing.JPanel; public class JPanelWithPhoto extends JPanel { private Icon icon ; public Icon getIcon() { return icon; } public void setIcon(Icon icon) { this.icon = icon; } public JPanelWithPhoto(Icon icon){ this.icon = icon ; } @Override protected void paintComponent(Graphics g) { if(icon!=null) icon.paintIcon(this, g, 0, 0); } 

}

你可能感兴趣的:(swing-JPanel-背景图片)