swing storm

java桌面应用

导航

<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

常用链接

留言簿(15)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜

今天发现了JTabbedPane的一个bug!

当所有的tab被移除之后,背景上还留有原JTabbedPane所停留的痕迹(灰色边框)。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.border.EmptyBorder;

public class TabbedPaneExample extends JFrame {
    JTabbedPane tabbedPane 
= new JTabbedPane();

    JPanel tabbedPanePanel 
= new JPanel();

    
public void createAndShowGUI() {
        tabbedPanePanel.setLayout(
new BorderLayout());
        tabbedPanePanel.setBackground(
new Color(35119179));
        tabbedPanePanel.setBorder(
new EmptyBorder(58510));

        tabbedPane.setBackground(
new Color(79147196));
        tabbedPane.setBorder(
new EmptyBorder(0000));

        tabbedPane.add(
new JLabel("tab1"), "tab1");
        tabbedPane.add(
new JLabel("tab2"), "tab2");
        
        tabbedPanePanel.add(tabbedPane, BorderLayout.CENTER);
        
        JButton btn 
= new JButton("close all");
        btn.addMouseListener(
new MouseAdapter() {
            
public void mouseClicked(MouseEvent e) {
                tabbedPane.removeAll();
            }
        });

        tabbedPanePanel.add(btn, BorderLayout.NORTH);
        
        
this.setLayout(new BorderLayout());
        
this.add(tabbedPanePanel, BorderLayout.CENTER);
        
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
this.setSize(new Dimension(300200));
        
this.setLocationRelativeTo(null);
        
this.setVisible(true);
    }

    
public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(
new Runnable() {
            
public void run() {
                TabbedPaneExample example 
= new TabbedPaneExample();
                example.createAndShowGUI();
            }
        });
    }
}

posted on 2007-05-27 12:09 azure 阅读(1813) 评论(5)  编辑  收藏

评论

# re: 今天发现了JTabbedPane的一个bug! 2007-05-27 14:46 ronghai

你重新绘画一下就行了 .在重新 设一下可视   回复  更多评论   

# re: 今天发现了JTabbedPane的一个bug! 2007-05-27 14:47 ronghai

this.repaint();
this.setVisible(true);  回复  更多评论   

# re: 今天发现了JTabbedPane的一个bug! 2007-05-27 15:22 azure

谢谢你的建议,使用this.setVisible(false); 可以让痕迹消失。这样做绕过了这个bug。这样做可以达到效果要求,:)
不足的是在实际应用中在removeAll();之后还要add();
如果使用了this.setVisible(false); 每次添加tab的时候还要this.setVisible(true)。
我在想:tabbedPane.setBorder(new EmptyBorder(0, 0, 0, 0));
之后removeAll();tabbedPane为什么还会有灰色的边框,这是一个bug吗。  回复  更多评论   

# re: 今天发现了JTabbedPane的一个bug![未登录] 2007-05-28 01:54 biaoflying

1:要重回的话应该是TabbedPaneExample.this.repaint();
2:但是没有用  回复  更多评论   

# re: 今天发现了JTabbedPane的一个bug![未登录] 2007-05-29 09:10 wzjin

在提交bug前是要注意些,前不久我也碰到类似情况,jdk升级以后以前有个功能不能实现了,后来加了两行代码就好了。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: