Скрыть кнопки в строке заголовка в Java

В Jinternal Frame (java) я хочу скрыть кнопку max, min, close (не отключать свойства max, min, close), но когда я использовал этот код:

javax.swing.plaf.InternalFrameUI ifu= jif.getUI(); //jif : finternalframe//
((javax.swing.plaf.basic.BasicInternalFrameUI)ifu).setNorthPane(null);

Это заставило все кнопки и строку заголовка исчезнуть (представьте, что внутренняя рамка представляет собой прямоугольник, поэтому видны только 3 стороны (вниз, слева и справа).

Итак, как я могу скрыть только 3 кнопки max, min и close, не скрывая всю строку заголовка? Спасибо.


person Thanh Nguyen    schedule 20.02.2012    source источник


Ответы (4)


..хочу скрыть макс, мин, кнопку закрытия

Удалить элементы управления

import java.awt.*;
import javax.swing.*;

class RemoveControls {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JPanel p = new JPanel(new GridLayout());
                p.setPreferredSize(new Dimension(300,120));

                JDesktopPane dtp = new JDesktopPane();
                p.add(dtp);

                JInternalFrame jif = new JInternalFrame("JIF",
                    false, //resizable
                    false, //closable
                    false, //maximizable
                    false); //iconifiable
                jif.setVisible(true);
                jif.setSize(200,100);
                dtp.add(jif);

                JOptionPane.showMessageDialog(null, p);
            }
        });
    }
}
person Andrew Thompson    schedule 20.02.2012

См. это... http://www.roseindia.net/java/example/java/swing/minimize-maximize.shtml

Проблема с кнопкой закрытия....

Как отключить (или скрыть) кнопку закрытия (x) на JFrame?

person Samir Mangroliya    schedule 20.02.2012
comment
Спасибо, но я также хочу скрыть кнопку закрытия, я уже отредактировал свой пост. - person Thanh Nguyen; 20.02.2012

Если вы используете netbeans, это легко. Просто создайте новый JInternalFrameForm, щелкнув правой кнопкой мыши любой из ваших пакетов.

Просто добавьте этот JInternalFrameForm в любой из ваших контейнеров (например, в панель рабочего стола).

Мое имя JInternalFrameForm — internal1, а имя моей панели рабочего стола — desk.

// псевдокод:

    InternalFrame mboxFrame = new internal1();
    mboxFrame.setResizable(false);
    mboxFrame.setSize(desk.getWidth(), desk.getHeight());
    mboxFrame.setLocation(0, 0);
    mboxFrame.setVisible(true);
    desk.add(mboxFrame);
person Krish Nakum R    schedule 10.10.2014

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

Следующие шаги должны помочь вам:

1) вызвать метод setUndecorated(true). Это, к сожалению, полностью удалит строку заголовка, но позволит вам выполнить шаг 2.

2) Затем создайте класс, который позволит вам создать строку заголовка с помощью JFrame. Имейте в виду, что кнопки окна отображаются справа для ОС Windows и слева для Mac OS. Текст заголовка также выравнивается по центру на Mac и выравнивается по левому краю в Windows.

3) Используйте JLabel для отображения текста заголовка и JButton для отображения кнопок "свернуть", "развернуть" и "закрыть". Я бы также рекомендовал сгруппировать кнопки и расположить текст заголовка так, чтобы строка заголовка была похожа на ту, которую отображает ОС на вашем компьютере.

4) [Необязательно] вы можете прикрепить ActionListener к кнопкам, чтобы визуализировать поведение окна. Сюда входят setState() для минимизации и setExtendedState для максимизации. Закрытие окна дает вам два варианта: System.exit(0) для приложений и dispose() для апплетов.

5) [Также необязательно] для отключения кнопок просто используйте метод setEnabled(false). В вашем случае, чтобы скрыть эти кнопки, вы должны использовать setVisible(false)

Следующий фрагмент кода демонстрирует это:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class TitleBar extends JPanel
{
    private JLabel titleLabel; //create this to hold the title text

    JFrame frame    = new JFrame();

    int pX, pY; //used for window dragging

    private JButton closeBtn, minBtn, maxBtn; //create these for the window buttons

    public TitleBar(String title)
    {
        setPreferredSize(new Dimension(1000, 28));

        titleLabel = new JLabel(title);
        titleLabel.setOpaque(true);

        JPanel controls = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); //define this to hold the title text and window buttons

        closeBtn    = new JButton(); //define the Close button
        closeBtn.setBorderPainted(false);

        //set the icons for the states
        closeBtn.setIcon(new WindowButtonIcon().new CloseIcon(true, false));
        closeBtn.setPressedIcon(new WindowButtonIcon().new CloseIcon(true, true));
        closeBtn.setDisabledIcon(new WindowButtonIcon().new CloseIcon(false, false));

        //Apply the more fine adjustments
        closeBtn.setPreferredSize(new Dimension(17, 17));
        closeBtn.setRolloverEnabled(false);
        closeBtn.setFocusPainted(false);

        //Attach this action listener to render the "close window" function
        closeBtn.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        });

        minBtn      = new JButton(); // define the Minimize button
        minBtn.setBorderPainted(false);

        //set the icons for the selection states
        minBtn.setIcon(new WindowButtonIcon().new MinimizeIcon(true, false));
        minBtn.setPressedIcon(new WindowButtonIcon().new MinimizeIcon(true, true));
        minBtn.setDisabledIcon(new WindowButtonIcon().new MinimizeIcon(false, false));

        //Apply the more fine adjustments
        minBtn.setPreferredSize(new Dimension(17, 17));
        minBtn.setRolloverEnabled(false);
        minBtn.setFocusPainted(false);

        maxBtn      = new JButton(); //define the Maximize button
        maxBtn.setBorderPainted(false);

        //set the icons for the selection states
        maxBtn.setIcon(new WindowButtonIcon().new MaximizeIcon(true, false));
        maxBtn.setPressedIcon(new WindowButtonIcon().new MaximizeIcon(true, true));
        maxBtn.setDisabledIcon(new WindowButtonIcon().new MaximizeIcon(false, false));

        //Apply the more fine adjustments
        maxBtn.setPreferredSize(new Dimension(17, 17));
        maxBtn.setRolloverEnabled(false);
        maxBtn.setFocusPainted(false);

        //This JPanel will set up the title text and window buttons
        controls.setBackground(null);
        controls.add(minBtn);
        controls.add(Box.createRigidArea(new Dimension(4, 0)));
        controls.add(maxBtn);
        controls.add(Box.createRigidArea(new Dimension(4, 0)));
        controls.add(closeBtn);

        setLayout(new FlowLayout(FlowLayout.LEFT, 0, 3));

        //construct the custom title bar
        add(titleLabel);
        add(Box.createRigidArea(new Dimension(790, 0)));
        add(controls);

        //These render window dragging
        addMouseListener(new MouseAdapter()
        {
            public void mousePressed(MouseEvent me)
            {
                // Get x,y and store them
                pX = me.getX();
                pY = me.getY();
            }

            public void mouseDragged(MouseEvent me)
            {
                frame.setLocation(frame.getLocation().x + me.getX() - pX, frame.getLocation().y + me.getY() - pY);
            }
        });

        addMouseMotionListener(new MouseMotionAdapter()
        {
            public void mouseDragged(MouseEvent me)
            {
                frame.setLocation(frame.getLocation().x + me.getX() - pX, frame.getLocation().y + me.getY() - pY);
            }
        });
    }
}

Этот класс создает строку заголовка во внешнем виде Windows. Обратите внимание, что класс Icon, который использовался здесь, не указан, однако вы можете создать класс, который может его отображать.

Слушатели MouseEvent необходимы, если вы хотите перетаскивать окна.

Слушатель ActionEvent для кнопки закрытия также необходим, если вы хотите закрыть окно. Скрытие и отключение этой кнопки, естественно, отключит эту функцию.

Надеюсь, это поможет.

person CodeyX1    schedule 05.06.2015