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