下面的程序是创建一个JTabbedPane用来显示各种边框
后来我在每个JPanel里画了一张图,问题就出来了,大家可以运行一下看看@SuppressWarnings("serial")
public class JTabbedDemo extends JFrame { public JTabbedDemo(){
JTabbedPane tab = new JTabbedPane();
tab.addTab("线形", new BorderPanel(BorderFactory.createLineBorder(Color.BLUE, 5)));
tab.addTab("圆角", new BorderPanel(new LineBorder(Color.GRAY,5,true)));
tab.addTab("三维效应", new BorderPanel(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)));
tab.addTab("斜教", new BorderPanel(BorderFactory.createRaisedBevelBorder()));
tab.addTab("软斜角", new BorderPanel(new SoftBevelBorder(SoftBevelBorder.LOWERED)));
tab.addTab("组合", new BorderPanel(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(15, 15, 15, 15), new LineBorder(Color.gray,2,true))));
add(tab);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
new JTabbedDemo();
}
}
@SuppressWarnings("serial")
class BorderPanel extends JPanel {
private Image img;
private Insets inset;
private int w;
private int h;
public BorderPanel(Border b){
inset = getInsets();
w = 600 + inset.left + inset.right;
h = 800 + inset.top + inset.bottom;
setPreferredSize(new Dimension(w,h));
setBorder(b);
img = Toolkit.getDefaultToolkit().createImage(System.getProperty("user.dir") + "/img/1.jpg");
}
public void paint(Graphics g){
super.paint(g);
g.drawImage(img, inset.left, inset.top, w - inset.right, h - inset.bottom, null);
}
}
后来我在每个JPanel里画了一张图,问题就出来了,大家可以运行一下看看@SuppressWarnings("serial")
public class JTabbedDemo extends JFrame { public JTabbedDemo(){
JTabbedPane tab = new JTabbedPane();
tab.addTab("线形", new BorderPanel(BorderFactory.createLineBorder(Color.BLUE, 5)));
tab.addTab("圆角", new BorderPanel(new LineBorder(Color.GRAY,5,true)));
tab.addTab("三维效应", new BorderPanel(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)));
tab.addTab("斜教", new BorderPanel(BorderFactory.createRaisedBevelBorder()));
tab.addTab("软斜角", new BorderPanel(new SoftBevelBorder(SoftBevelBorder.LOWERED)));
tab.addTab("组合", new BorderPanel(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(15, 15, 15, 15), new LineBorder(Color.gray,2,true))));
add(tab);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
new JTabbedDemo();
}
}
@SuppressWarnings("serial")
class BorderPanel extends JPanel {
private Image img;
private Insets inset;
private int w;
private int h;
public BorderPanel(Border b){
inset = getInsets();
w = 600 + inset.left + inset.right;
h = 800 + inset.top + inset.bottom;
setPreferredSize(new Dimension(w,h));
setBorder(b);
img = Toolkit.getDefaultToolkit().createImage(System.getProperty("user.dir") + "/img/1.jpg");
}
public void paint(Graphics g){
super.paint(g);
g.drawImage(img, inset.left, inset.top, w - inset.right, h - inset.bottom, null);
}
}
super.paint(g);
g.drawImage(img, inset.left, inset.top, w - inset.right, h - inset.bottom, null);这2句是不是应该换下。。要不下面那句 没有作用了吧
我这里运行的话,看到那图,可是选其他页的时候,那图又不见了,
然后再选前面的页,其他页的图又可见了,而且边框不见了super.paint(g);放在下面那就更看不到那图了好吧
可以 在BorderPanel 里面内嵌一个jpanel 专门用来显示图片
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Toolkit;import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.SoftBevelBorder;public class JTabbedDemo extends JFrame {
public JTabbedDemo() {
JTabbedPane tab = new JTabbedPane();
tab.addTab("线形", new BorderPanel(BorderFactory.createLineBorder(
Color.BLUE, 5)));
tab.addTab("圆角", new BorderPanel(new LineBorder(Color.GRAY, 5, true)));
tab.addTab("三维效应", new BorderPanel(BorderFactory
.createEtchedBorder(EtchedBorder.RAISED)));
tab.addTab("斜教", new BorderPanel(BorderFactory
.createRaisedBevelBorder()));
tab.addTab("软斜角", new BorderPanel(new SoftBevelBorder(
SoftBevelBorder.LOWERED)));
tab.addTab("组合", new BorderPanel(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(15, 15, 15, 15),
new LineBorder(Color.gray, 2, true))));
add(tab);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
} public static void main(String[] args) {
new JTabbedDemo();
}
}@SuppressWarnings("serial")
class BorderPanel extends JPanel {
private Image img;
private Insets inset;
private int w;
private int h; public BorderPanel(Border b) {
inset = getInsets();
w = 600 + inset.left + inset.right;
h = 800 + inset.top + inset.bottom;
setPreferredSize(new Dimension(w, h));
setBorder(b); img = Toolkit.getDefaultToolkit().createImage(
System.getProperty("user.dir") + "/img/1.jpg");
System.out.println(inset.left + " : " + inset.right);
} @Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(img, 5, 5, w - inset.right, h
- inset.bottom, this);
}
}
g.drawImage(img, 5, 5, w - inset.right, h - inset.bottom, this);
只改了这一句,我感觉你你覆写的paint方法是在背景画图吧.所以边框显示不出来,至于没有显示是因为
g.drawImage的最后一个参数你设为null的原因.