2015-07-09 8 views
-1

Я искал удаление границы JInternalFrame, n У меня есть ответ here. Но теперь мой запрос после применения границы к null, граница не удаляется. В соответствии с вторым ответом, указанным в question, я попытался установить границу с границей Empty. У меня был успех. И, наконец, мои вопросы следующие.Как удалить границу JInternalFrame?

  1. Почему граница не удаляется, даже если я установил границу равным нулю (например, jif.setBorder(null);)?
  2. Я установил границу для пустой границы (например, jif.setBorder(BorderFactory.createEmptyBorder());), но заголовок JInternalFrame все еще виден, как скрыть заголовок JInternalFrame с его границей?

Под редакцией Гириш

Мой пример кода, как показано ниже:

пакет 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 не должен перемещаться пользователем.

+2

Вы можете оставить свой код? – Jegg

+0

@Jegg Я уже разместил свой код в скобках. Если вам нужен полный код, тогда его не нужно, потому что код настолько прост, и любой Java-разработчик может понять код, поэтому я не разместил код. – Girish

+2

@Girish, необходим код 'IS'. Мы не можем сказать, как вы на самом деле используете этот код. Нам нужен правильный [SSCCE] (http://sscce.org/), который демонстрирует проблему. Это создает кадр, добавляет JDesktopPane к фрейму и добавляет JInternalFrame на панель рабочего стола. Код будет около 20-30 строк кода и покажет нам, что именно вы делаете.Кстати, setBorder (null) работает для меня. Вот почему нам нужен ваш код, потому что проблема заключается в вашем коде, а не в двух опубликованных вами заявлениях. – camickr

ответ

2

Как удалить границу JInternalFrame?

Вы используете:

internalFrame.setBorder(null); 

Это работает для меня с помощью JDK8 в Windows 7. Если это не работает для проводка надлежащего SSCCE.

Как скрыть заголовок JInternalFrame с его границей?

Вы можете использовать следующее. Это будет еще оставить немного границы в верхней части, если внутренняя рамка, которая позволяет перетащить рамку вокруг

internalFrame.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE); 

Если вам не нужно перетягивание функциональности, то реальный вопрос, почему вы пытаетесь удалить границу ? Точка, если используется внутренний кадр, позволяет пользователю свободно перемещать рамку вокруг рабочего стола, перетаскивая рамку.

Если вам нужна панель без границы, используйте JPanel и добавьте панель в родительскую панель. Нет необходимости в сложности JDestopPane/JInternalPane, если вы не собираетесь использовать эти функции.

+0

Я пробовал код, указанный вами ('internalFrame.putClientProperty (« JInternalFrame.isPalette », Boolean.TRUE);'). Но не работает. Еще одна вещь, я использую JDK7 для Windows 7 – Girish

Смежные вопросы