请先看代码: JTextField jt = new JTextField("你好!");
jl_center.add(jt);
jt.setOpaque(false);
jt.setBorder(
new Border(){
@Override
public boolean isBorderOpaque() {
// TODO Auto-generated method stub
return false;
} @Override
public Insets getBorderInsets(Component c) {
// TODO Auto-generated method stub
return null;
} @Override
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
// TODO Auto-generated method stub
}
}
);
就是这一段代码出了错!
我只不过是在setBorder()里写了个内部类,怎么就错了?
setBorder()的参数本来就是Border啊?我查了API,是public void setBorder(Border border)啊,怎么错了呢?
求教!
jl_center.add(jt);
jt.setOpaque(false);
jt.setBorder(
new Border(){
@Override
public boolean isBorderOpaque() {
// TODO Auto-generated method stub
return false;
} @Override
public Insets getBorderInsets(Component c) {
// TODO Auto-generated method stub
return null;
} @Override
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
// TODO Auto-generated method stub
}
}
);
就是这一段代码出了错!
我只不过是在setBorder()里写了个内部类,怎么就错了?
setBorder()的参数本来就是Border啊?我查了API,是public void setBorder(Border border)啊,怎么错了呢?
求教!
@Override
public Insets getBorderInsets(Component c) {
// TODO Auto-generated method stub
return null;
}
所以,NullPointerException
可是,我一写new Border,它自带的跟出所有的这些方法。
毕竟,本来Border就是接口,是要实现的部分。
而以上的3个override函数就是自带的,为什么抛出异常?
怎么解决呢?
我这个代码,目的就是想使得JLabel的边框(也就是JLabel的外延)变得透明!
我找了API,我自己猜用setBorder实现,然后看函数原型是public void setBorder(Border border);其实也没有更多的代码了,上面贴的就是核心了!我就把代码都贴出来吧,请看:
public class TestJLabel_s_BorderLayout extends JFrame{
TestJLabel_s_BorderLayout(){
JLabel jl_top = new JLabel("1 ") ;
jl_top.setOpaque(true) ;
jl_top.setBackground(Color.black) ;
JLabel jl_left = new JLabel(" 2") ;
jl_left.setOpaque(true) ;
jl_left.setBackground(Color.blue) ;
JLabel jl_buttom = new JLabel("3 ") ;
jl_buttom.setOpaque(true) ;
jl_buttom.setBackground(Color.cyan) ;
JLabel jl_right = new JLabel("4 ") ;
jl_right.setOpaque(true) ;
jl_right.setBackground(Color.gray) ;
JLabel jl_center = new JLabel() ;
jl_center.setOpaque(true) ;
jl_center.setBackground(Color.red) ;
jl_center.setLayout(new FlowLayout());
JTextField jt = new JTextField("你好!");
jl_center.add(jt);
jt.setOpaque(false);
jt.setBorder(
new Border(){
@Override
public boolean isBorderOpaque() {
// TODO Auto-generated method stub
return false;
} @Override
public Insets getBorderInsets(Component c) {
// TODO Auto-generated method stub
return null;
} @Override
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
// TODO Auto-generated method stub
}
}
); JPanel jp = new JPanel(){
@Override
public void setLayout(LayoutManager mgr) {
// TODO Auto-generated method stub
mgr = new BorderLayout() ;
super.setLayout(mgr);
}
} ;
add(jp) ;
jp.add(jl_top, BorderLayout.NORTH) ;
jp.add(jl_left, BorderLayout.WEST) ;
jp.add(jl_buttom, BorderLayout.SOUTH) ;
jp.add(jl_right, BorderLayout.EAST) ;
jp.add(jl_center,BorderLayout.CENTER);
setMinimumSize(new Dimension(350,200));
setVisible(true) ;
pack() ;
addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
arg0.getWindow().dispose() ;
super.windowClosing(arg0);
}
}) ;
}
public static void main(String[] args) {
new TestJLabel_s_BorderLayout() ;
}
}红体字就是错误处
建议你先用java已有的透明边框类EmptyBorder来完成这个程序。代码如下
package TestLogin_claP;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;public class TestJLabel_s_BorderLayout extends JFrame { TestJLabel_s_BorderLayout() {
JLabel jl_top = new JLabel("1 ");
jl_top.setOpaque(true);
jl_top.setBackground(Color.black);
JLabel jl_left = new JLabel(" 2");
jl_left.setOpaque(true);
jl_left.setBackground(Color.blue);
JLabel jl_buttom = new JLabel("3 ");
jl_buttom.setOpaque(true);
jl_buttom.setBackground(Color.cyan);
JLabel jl_right = new JLabel("4 ");
jl_right.setOpaque(true);
jl_right.setBackground(Color.gray);
JLabel jl_center = new JLabel();
jl_center.setOpaque(true);
jl_center.setBackground(Color.red);
jl_center.setLayout(new FlowLayout());
JTextField jt = new JTextField("你好!");
jl_center.add(jt);
jt.setOpaque(false);
jt.setBorder(new EmptyBorder(0,0,100,100)); // 这样就行!
JPanel jp = new JPanel() {
@Override
public void setLayout(LayoutManager mgr) {
// TODO Auto-generated method stub
mgr = new BorderLayout();
super.setLayout(mgr);
}
};
add(jp);
jp.add(jl_top, BorderLayout.NORTH);
jp.add(jl_left, BorderLayout.WEST);
jp.add(jl_buttom, BorderLayout.SOUTH);
jp.add(jl_right, BorderLayout.EAST);
jp.add(jl_center, BorderLayout.CENTER);
setMinimumSize(new Dimension(350, 200));
setVisible(true);
pack();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
arg0.getWindow().dispose();
super.windowClosing(arg0);
}
});
} public static void main(String[] args) {
new TestJLabel_s_BorderLayout();
}
}
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;public class TestJLabel_s_BorderLayout extends JFrame { TestJLabel_s_BorderLayout() {
JLabel jl_top = new JLabel("1 ");
jl_top.setOpaque(true);
jl_top.setBackground(Color.black);
JLabel jl_left = new JLabel(" 2");
jl_left.setOpaque(true);
jl_left.setBackground(Color.blue);
JLabel jl_buttom = new JLabel("3 ");
jl_buttom.setOpaque(true);
jl_buttom.setBackground(Color.cyan);
JLabel jl_right = new JLabel("4 ");
jl_right.setOpaque(true);
jl_right.setBackground(Color.gray);
JLabel jl_center = new JLabel();
jl_center.setOpaque(true);
jl_center.setBackground(Color.red);
jl_center.setLayout(new FlowLayout());
JTextField jt = new JTextField("你好!");
jl_center.add(jt);
jt.setOpaque(false);
jt.setBorder(new Border() {
int thickness = 1; @Override
public boolean isBorderOpaque() {
// TODO Auto-generated method stub
return true;
} @Override
public Insets getBorderInsets(Component c) {
// TODO Auto-generated method stub
return new Insets(thickness, thickness, thickness, thickness);
} @Override
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
// TODO Auto-generated method stub
g.setColor(Color.red); g.fill3DRect(x, y, width - thickness, thickness, false);
g.fill3DRect(x, y + thickness, thickness, height - thickness,
false);
g.fill3DRect(x + thickness, y + height - thickness, width
- thickness, thickness, false);
g.fill3DRect(x + width - thickness, y, thickness, height
- thickness, false); }
}); //
JPanel jp = new JPanel() {
@Override
public void setLayout(LayoutManager mgr) {
// TODO Auto-generated method stub
mgr = new BorderLayout();
super.setLayout(mgr);
}
};
add(jp);
jp.add(jl_top, BorderLayout.NORTH);
jp.add(jl_left, BorderLayout.WEST);
jp.add(jl_buttom, BorderLayout.SOUTH);
jp.add(jl_right, BorderLayout.EAST);
jp.add(jl_center, BorderLayout.CENTER);
setMinimumSize(new Dimension(350, 200));
setVisible(true);
pack();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
arg0.getWindow().dispose();
super.windowClosing(arg0);
}
});
} public static void main(String[] args) {
new TestJLabel_s_BorderLayout();
}
}
OK,调出来了。
感谢2楼
谢谢你,也谢谢二楼!
我先调调你的程序,OK了之后结贴给分!
thanks!
初学者再问:我API,那个setBorder是public void setBorder(Border border),可是为什么你可以
写成jt.setBorder(new EmptyBorder(){...}),这样写参数不就变了?我没反应过来这是为什么?