首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

setBorder的使用有关问题,出现了错误

2013-02-15 
setBorder的使用问题,出现了异常请先看代码:JTextFieldjtnewJTextField(你好!)jl_center.add(jt)jt.s

setBorder的使用问题,出现了异常
请先看代码:


JTextFieldjt=newJTextField("你好!");
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
[解决办法]
引用:
引用:
问题在于这些代码你写在哪个方法里。根据经验,如果是构造函数的话,可能就会出问题。
能多贴代码出来么?

我这个代码,目的就是想使得JLabel的边框(也就是JLabel的外延)变得透明!
我找了API,我自己猜用setBorder实现,然后看函数原型是public void setBorder(Border border);

其实也没有更多的代……

首先,对你积极实现这样一个透明边框的努力表示肯定!我也正在调试你的程序。
建议你先用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();
}
}



[解决办法]
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;

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楼

引用:
Java code?12345            @Override            public Insets getBorderInsets(Component c) {                // TODO Auto-generated method stub                return null;            }

……

热点排行
Bad Request.