JavaSE Swing知识漏洞

转载 2013年12月07日 15:08:12

1. Frame  的默认布局方式是 BorderLayout,所以如果要使用 setBounds 方法给组件设置具体位置时最好是 将默认的布局方式去掉,设置为null

例如:

//        this.setLayout(null);
        
        gamePanel.setVisible(true);
        pokerPanel.setVisible(true);
        gameInfoPanel.setVisible(true);

        
        pokerPanel.setBounds(10, 10, 580, 200);
        pokerPanel.setBackground(Color.RED);
        
        gamePanel.setBounds(10, 220, 580, 200);
        gamePanel.setBackground(Color.GREEN);
        
        gameInfoPanel.setBounds(10, 430, 580, 140);
        gameInfoPanel.setBackground(Color.BLUE);
        
        add(pokerPanel);
        add(gamePanel);
        add(gameInfoPanel);

效果:无论是哪个panel最后加上去都会铺满整个frame

2011-06-30_215432

 

去掉注释后的正确效果:

 

2011-06-30_215531

 

2. 显示图片

第一种方法是给label放一个 图片,

实例:

package com;  
import java.awt.BorderLayout;  
import java.net.URL;  
import javax.swing.*;  
  
public class ShowImage extends JFrame{  
    /** 
     * @param args 
     */  
    public ShowImage() {  
        JPanel panel=new JPanel(new BorderLayout());  
        JPanel panel2=new JPanel(new BorderLayout());  
        JPanel panel3=new JPanel(new BorderLayout());  
          
        String urlString="D:\\MyEclipse 6.0\\新建文件夹\\Exam\\bin\\images\\winter.jpg";  
        JLabel label=new JLabel(new ImageIcon(urlString));  
          
        URL url=getClass().getResource("/images/orz2.jpg");  
        JLabel label2=new JLabel(new ImageIcon(url));  
          
        URL url2=getClass().getResource("/images/orz.jpg");  
        JLabel label3=new JLabel(new ImageIcon(url2));  
      
        panel.add(label,BorderLayout.CENTER);  
        panel2.add(label2,BorderLayout.CENTER);  
        panel3.add(label3,BorderLayout.CENTER);  
          
        this.getContentPane().setLayout(new BorderLayout());  
        this.getContentPane().add(panel,BorderLayout.CENTER);  
        this.getContentPane().add(panel2,BorderLayout.SOUTH);  
        this.getContentPane().add(panel3,BorderLayout.EAST);  
          
        this.setSize(400, 300);  
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        this.setTitle("显示图像");  
        this.setVisible(true);  
    }  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
      ShowImage showImage=new ShowImage();  
    }  
  
} 

label1是使用绝对路径,label2和label3使用的是相对路径,相对于类文件(.class文件)的路径

 

另一种更好的画图方法:使用 g.drawImage

实例:

        Color color=g.getColor();//首先要重画面板,清除前面的所有内容
        g.setColor(this.getBackground());
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        g.setColor(color);
        
        URL url1 = getClass().getResource("images/"+a+".jpg");
        Image image1=getToolkit().getImage(url1);
        g.drawImage(image1, 20, 10, null, this);

 

我的实例:

        URL url1 = getClass().getResource("images/"+a+".jpg");
        Image image1=getToolkit().getImage(url1);
        g.drawImage(image1, 30, 10, null, this);
        
        URL url2 = getClass().getResource("images/"+b+".jpg");
        Image image2=getToolkit().getImage(url2);
        g.drawImage(image2, 164, 10, null, this);
        
        URL url3 = getClass().getResource("images/"+c+".jpg");
        Image image3=getToolkit().getImage(url3);
        g.drawImage(image3, 298, 10, null, this);
        
        URL url4 = getClass().getResource("images/"+d+".jpg");
        Image image4=getToolkit().getImage(url4);
        g.drawImage(image4, 432, 10, null, this);
        
        //之前使用的是label,不是很好
//        URL url1 = getClass().getResource("images/"+a+".jpg");
//        JLabel label1 = new JLabel(new ImageIcon(url1));
//        this.add(label1);
//        
//        URL url2 = getClass().getResource("images/"+b+".jpg");
//        JLabel label2 = new JLabel(new ImageIcon(url2));
//        this.add(label2);
//
//        URL url3 = getClass().getResource("images/"+c+".jpg");
//        JLabel label3 = new JLabel(new ImageIcon(url3));
//        this.add(label3);
//
//        URL url4 = getClass().getResource("images/"+d+".jpg");
//        JLabel label4 = new JLabel(new ImageIcon(url4));
//        this.add(label4);

效果图:

2011-06-30_234757

 

3.setBounds和setLocation

实例:

        JButton newButton = new JButton("New game");
        newButton.setLocation(300, 20);        
//        newButton.setBounds(400, 20,100,30);   
        gamePanel.add(newButton);   

效果是:【左图:setLocation 】没有显示  【右图:setBounds 】 显示

no  yes

 

所以说:如果要让它显示出来,要么使用setBounds或者setLocation加上setSize(两个都要写,不然就不会显示出来了)

相关文章推荐

博为峰Java技术文章 ——JavaSE Swing FlowLayout布局管理器II

博为峰小博老师: FlowLayout容器中组件都是依次排列的,没有像BorderLayout布局管理器一样有5个不同的方位。下面将BorderLayout布局管理器和FlowLayout布局管理器...
  • bwf_erg
  • bwf_erg
  • 2017年01月12日 19:24
  • 98

博为峰Java技术文章 ——JavaSE Swing FlowLayout布局管理器I

博为峰小博老师: 这种布局管理器的策略也非常简单,它是按照控件加入的先后顺序从左到右排列,一行排满了,再换下一行,然后在从左到右排列。每一行的组件都是居中排列的。另外如果有些按钮看不到,可以使用pa...
  • bwf_erg
  • bwf_erg
  • 2017年01月12日 19:16
  • 149

博为峰Java技术文章 ——JavaSE Swing JComponent类II

博为峰小博老师: JComponent类的一些特性。其实它的特性非常多,其中有9大特性尤其显著。 Tool tips Tool tips就是工具提示功能,通过在setToolTipText方法中指定字...
  • bwf_erg
  • bwf_erg
  • 2016年12月26日 20:11
  • 112

博为峰Java技术文章 ——JavaSE Swing GridLayout布局管理器II

博为峰小博老师: 下面将GirdLayout, BorderLayout, FlowLayout布局管理器结合起来设计一个综合实例,主要思路是用GirdLayout布局管理器与顶层窗口关联,在这个布局...
  • bwf_erg
  • bwf_erg
  • 2017年01月16日 20:08
  • 165

JAVASE学习(13)Swing

图形界面(Grephics User Interface,GUI) Sun提供了一个跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit) =>Sun又创建一...

JavaSE中Swing类中的一些典型的组件

Swing组件

博为峰Java技术文章 ——JavaSE Swing使用数组和Vector创建下拉列表框

博为峰小博老师: 下拉列表框与列表框的使用方式一样,只不过下拉列表框是将列表中所有的选项隐藏在下拉框中,显示出来的是用户需要的数据。下面将通过表格的形式列出下拉列表框的构造器,如下所示。 ...
  • bwf_erg
  • bwf_erg
  • 2017年03月07日 18:35
  • 156

博为峰Java技术文章 ——JavaSE Swing动作事件的处理

博为峰小博老师: 动作事件类主要针对组件,何谓动作事件呢?例如单击按钮、选择菜单、在文本框中输入字符串并且按Enter键,这些都属于动作事件。动作事件监听接口是ActionListener接口,在这...
  • bwf_erg
  • bwf_erg
  • 2017年02月22日 19:03
  • 135

博为峰Java技术题 ——JavaSE Java Swing在顶层容器中添加菜单栏II

博为峰小博老师: 上篇文章的示例中可以看出在顶层容器上是如何添加菜单的。那么在菜单中的空白处是否能够添加基本组件呢?看下面一段代码: public class BWFSwingMenu { st...
  • bwf_erg
  • bwf_erg
  • 2016年12月21日 11:47
  • 390

博为峰Java技术文章 ——JavaSE Swing 单选按钮II

博为峰小博老师: 在上篇文章中,3个单选按钮同时都可以被选中,这个就不符合实际开发中所用到的单选按钮的要求。在实际开发中,需要的单选按钮被选中,其他的单选按钮自动被置为未选中状态,要产生这种效果,就...
  • bwf_erg
  • bwf_erg
  • 2017年01月03日 18:47
  • 113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaSE Swing知识漏洞
举报原因:
原因补充:

(最多只允许输入30个字)