再做一个java界面时,发现对弹出窗口的默认大小和背景颜色设置不起作用,为什么?
代码:importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;importjava.util.EventL...
代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.EventListener;
public class Game extends JFrame{
public static JLabel lab=new JLabel();
public Game()
{
super("鼠标坐标测试");
setLayout(new GridLayout(5,1));
JPanel fp=new JPanel();
fp.addMouseMotionListener(new myMouseListener());
fp.add(lab);
add(fp);
/*********************问题就在这块儿!!**************************/
setBackground(Color.red);
setBounds(200, 200, 500, 500);
/**********************************************************/
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
class myMouseListener implements MouseMotionListener
{...}
public static void main(String [] args)
{
Game game=new Game();
}
} 展开
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.EventListener;
public class Game extends JFrame{
public static JLabel lab=new JLabel();
public Game()
{
super("鼠标坐标测试");
setLayout(new GridLayout(5,1));
JPanel fp=new JPanel();
fp.addMouseMotionListener(new myMouseListener());
fp.add(lab);
add(fp);
/*********************问题就在这块儿!!**************************/
setBackground(Color.red);
setBounds(200, 200, 500, 500);
/**********************************************************/
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
class myMouseListener implements MouseMotionListener
{...}
public static void main(String [] args)
{
Game game=new Game();
}
} 展开
展开全部
弹出窗口的默认大小和背景颜色设置不起作用,首先我们来看窗口的默认大小不起作用,是因为你的程序调用了pack();函数,而它的作用是调整此窗口的大小,以适合其子组件的首选大小和布局,
所以窗口按照其子组件的大小来显示了。再来看背景颜色设置不起作用,因为JFrame有多层容器,上一层会把下一层的容器遮住,所以你设置了背景色但是看不见,解决方法是,我们设置最上层容器ContentPane的背景色,就行了。另外,JPanel也遮挡了一部分背景色,如果需要你可以把JPanel设为透明,这样就能看到完整的背景色了。
完整的程序如下:(改动的地方见注释)
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.EventListener;
public class Game extends JFrame{
public static JLabel lab=new JLabel();
public Game() {
super("鼠标坐标测试");
Container c=getContentPane();//这里加一句取JFrame的最上层容器
setLayout(new GridLayout(5,1));
JPanel fp=new JPanel();
fp.addMouseMotionListener(new myMouseListener());
fp.add(lab);
//fp.setOpaque(false);//如果需要JPanel透明,去掉注释
c.add(fp);//这里add(fp);改成c.add(fp);
/*********************问题就在这块儿!!**************************/
c.setBackground(Color.red);//这里setBackground(Color.red);改成c.setBackground(Color.red);
setBounds(200, 200, 500, 500);
/**********************************************************/
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//pack();//这里去掉一句
}
class myMouseListener implements MouseMotionListener{
public void mouseDragged(MouseEvent arg0) {
}
public void mouseMoved(MouseEvent arg0) {
}
}
public static void main(String [] args) {
Game game=new Game();
}
}
所以窗口按照其子组件的大小来显示了。再来看背景颜色设置不起作用,因为JFrame有多层容器,上一层会把下一层的容器遮住,所以你设置了背景色但是看不见,解决方法是,我们设置最上层容器ContentPane的背景色,就行了。另外,JPanel也遮挡了一部分背景色,如果需要你可以把JPanel设为透明,这样就能看到完整的背景色了。
完整的程序如下:(改动的地方见注释)
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.EventListener;
public class Game extends JFrame{
public static JLabel lab=new JLabel();
public Game() {
super("鼠标坐标测试");
Container c=getContentPane();//这里加一句取JFrame的最上层容器
setLayout(new GridLayout(5,1));
JPanel fp=new JPanel();
fp.addMouseMotionListener(new myMouseListener());
fp.add(lab);
//fp.setOpaque(false);//如果需要JPanel透明,去掉注释
c.add(fp);//这里add(fp);改成c.add(fp);
/*********************问题就在这块儿!!**************************/
c.setBackground(Color.red);//这里setBackground(Color.red);改成c.setBackground(Color.red);
setBounds(200, 200, 500, 500);
/**********************************************************/
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//pack();//这里去掉一句
}
class myMouseListener implements MouseMotionListener{
public void mouseDragged(MouseEvent arg0) {
}
public void mouseMoved(MouseEvent arg0) {
}
}
public static void main(String [] args) {
Game game=new Game();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询