К сожалению, вы не можете скрыть эти кнопки.Я тоже это попробовал и не увенчался успехом.Однако для этого есть обходной путь, заключающийся в создании пользовательской строки заголовка.Это довольно утомительно, но работает.
Следующие шаги должны помочь вам:
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
для кнопки закрытия также является обязательным требованием, если вы хотите закрыть окно.Скрытие и отключение этой кнопки естественным образом отключит эту функцию
Надеюсь, это поможет.