如何删除JInternalFrame的边框?

时间:2015-07-09 13:10:04

标签: java swing

我已经搜索了删除JInternalFrame的边框,我已经得到了答案here.但现在我的查询是在将border应用于null之后,边框未被删除。根据{{​​3}}给出的第二个答案,我试图将边界设置为空边框我已经成功了。最后,我的问题如下。

  1. 为什么即使我将border设置为null(例如jif.setBorder(null);)?
  2. 也不会删除边框
  3. 我将边框设置为空边框(例如jif.setBorder(BorderFactory.createEmptyBorder());),但JInternalFrame的标题栏仍然可见,如何隐藏JInternalFrame的标题及其边框?
  4. 由Girish编辑

    我的代码示例如下:

    package com.laxmiagencies.ui;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ComponentEvent;
    import java.awt.event.ComponentListener;
    import java.awt.event.ContainerEvent;
    import java.awt.event.ContainerListener;
    
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JInternalFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    
    public class MDIParent extends JFrame {
    
        private static final long serialVersionUID = -7911142498378226657L;
    
        public JDesktopPane jdp;
    
        private JLabel apptitle;
    
        private MDIListener listen;
    
        public JMenuBar menubar;
    
        private boolean islogin;
    
        private boolean enablelogin;
    
        private JMenuItem mnuabout;
    
        public MDIParent()
        {
            super();
            enablelogin=false;
            init();
        }
    
        public MDIParent(String apptitle)
        {
            super(apptitle);
            enablelogin=false;
            init();
        }
    
        public MDIParent(String apptitle, boolean enablelogin)
        {
            super(apptitle);
            this.enablelogin=enablelogin;
            init();
        }
    
        public MDIParent(boolean enablelogin)
        {
            super();
            this.enablelogin=enablelogin;
            init();
        }
    
        public boolean isLoginEnabled()
        {
            return enablelogin;
        }
    
        public void setLoginEnabled(boolean enablelogin)
        {
            this.enablelogin=enablelogin;
            this.islogin=!this.enablelogin;
        }
    
        public boolean isLoggedIn()
        {
            return islogin;
        }
    
        private void init()
        {
            listen=new MDIListener();
    
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setExtendedState(JFrame.MAXIMIZED_BOTH);
            jdp=new JDesktopPane();
            jdp.setBounds(0, 0, getWidth(), getHeight());
            jdp.addContainerListener(listen);
            add(jdp);
    
            setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height-50);
    
            apptitle=new JLabel(getTitle());
            apptitle.setBounds(20, 50, getWidth()-30, 70);
            jdp.add(apptitle);
    
            menubar=new JMenuBar();
                mnuabout=new JMenuItem("About Us");
                mnuabout.addActionListener(listen);
                menubar.add(mnuabout);
            setJMenuBar(menubar);
    
            islogin=!enablelogin;
    
            addComponentListener(listen);
        }
    
        public void setAppTitle(String apptitle)
        {
            setTitle(apptitle);
            this.apptitle.setText(apptitle);
        }
    
        public void setTitleFont(Font font)
        {
            apptitle.setFont(font);
        }
    
        public void setTitleForeColor(Color color)
        {
            apptitle.setForeground(color);
        }
    
        //INFO Listener Class
        private class MDIListener implements ComponentListener, ActionListener, ContainerListener
        {
            //INFO Used Methods
            @Override
            public void actionPerformed(ActionEvent e)
            {
                if(e.getSource()==mnuabout)
                {
                    AboutUs abt=new AboutUs();
                    jdp.add(abt);
                    abt.setVisible(true);
                }
            }
    
            @Override
            public void componentResized(ComponentEvent e) 
            {
                jdp.setBounds(0, 0, getWidth(), getHeight());
                for(JInternalFrame frame:jdp.getAllFrames())
                {
                    frame.setSize(jdp.getWidth()-15, jdp.getHeight()-60);
                }
            }
    
            @Override
            public void componentShown(ComponentEvent e)
            {
                if(enablelogin)
                {
                    if(!islogin)
                    {
                        setEnabled(false);
                        LoginWindow login=new LoginWindow();
                        login.setUndecorated(true);
                        login.setAlwaysOnTop(true);
                        login.setVisible(true);
                    }
                }
            }
    
            @Override
            public void componentAdded(ContainerEvent e)
            {
                if(e.getChild() instanceof JInternalFrame)
                {
                    JInternalFrame child=(JInternalFrame)e.getChild();
                    child.setBounds(0, 0, jdp.getWidth()-15, jdp.getHeight()-60);
                    child.setBorder(javax.swing.BorderFactory.createEmptyBorder());
                }
            }
    
            //INFO Unused methods 
            @Override
            public void componentRemoved(ContainerEvent e){}
    
            @Override
            public void componentHidden(ComponentEvent e){}
    
            @Override
            public void componentMoved(ComponentEvent e){}
        }
    }
    

    JInternalFrame代码如下

    import javax.swing.BorderFactory;
    import javax.swing.JInternalFrame;
    import javax.swing.JPanel;
    
    public class AboutUs extends JInternalFrame {
    
        /**
         * 
         */
        private static final long serialVersionUID = -4542063025572303166L;
    
        private JPanel panel;
    
        public AboutUs()
        {
            setTitle("About Us");
            setLayout(null);
    
            panel=new JPanel();
                panel.setSize(200, 200);
                panel.setBorder(BorderFactory.createTitledBorder("About Us"));
            add(panel);
            setMaximizable(true);
        }
    
        public JPanel getPanel()
        {
            return panel;
        }
    }
    

    我还有一个问题:
    3.如何禁用拖动JInternalFrame?即用户不得移动JInternalFrame。

1 个答案:

答案 0 :(得分:2)

  

如何删除JInternalFrame的边框?

您使用:

internalFrame.setBorder( null );

这适用于我在Windows 7中使用JDK8。如果它不适用于您发布正确的SSCCE

  

如何用边框隐藏JInternalFrame的标题?

您可以使用以下内容。如果内部框架允许您拖动框架

,它仍将在顶部留下一个小边框
internalFrame.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);

如果您不需要拖动功能,那么真正的问题是您为什么要删除边框?如果使用内部框架,则允许用户通过拖动框架在桌面周围自由移动框架。

如果您只需要一个没有边框的面板,那么使用JPanel并将面板添加到父面板。如果您不打算使用这些功能,则不需要JDestopPane / JInternalPane的复杂性。