在Jinternal Frame(java)中,我想隐藏最大,最小,关闭按钮(不禁用max,min,close属性),但是当我使用这段代码时:
javax.swing.plaf.InternalFrameUI ifu= jif.getUI(); //jif : finternalframe//
((javax.swing.plaf.basic.BasicInternalFrameUI)ifu).setNorthPane(null);
它使所有按钮和标题栏都消失了(想象一下内部框架是一个回转,因此只有3边(向下,向左和向右)可见。)
那么,如何在不隐藏所有标题栏的情况下,最多只隐藏3个按钮,最小值和最小值? 感谢。
答案 0 :(得分:3)
..想要隐藏最大,最小,关闭按钮
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);
}
});
}
}
答案 1 :(得分:1)
看到这个...... http://www.roseindia.net/java/example/java/swing/minimize-maximize.shtml
关闭按钮问题....
答案 2 :(得分:0)
如果您使用netbeans,很容易。只需右键单击任何包,即可创建一个新的JInternalFrameForm。
只需将此JInternalFrameForm添加到任何容器(例如桌面窗格)。
我的JInternalFrameForm名称是internal1,我的桌面窗格名称是桌面。
//伪代码:
InternalFrame mboxFrame = new internal1();
mboxFrame.setResizable(false);
mboxFrame.setSize(desk.getWidth(), desk.getHeight());
mboxFrame.setLocation(0, 0);
mboxFrame.setVisible(true);
desk.add(mboxFrame);
答案 3 :(得分:0)
不幸的是,你无法隐藏这些按钮。我也尝试了这个并没有成功。但是,有一个解决方法,即创建一个自定义标题栏。这有点乏味,但它确实有效。
以下步骤可以帮助您:
1)调用setUndecorated(true)
方法。不幸的是,这将完全删除标题栏,但允许您执行第2步。
2)然后,创建一个允许您使用JFrame
创建标题栏的类。请记住,窗口按钮显示在Windows操作系统的右侧,左侧显示在Mac OS中。标题文本也以Mac为中心,在Windows上左对齐。
3)使用JLabel
显示标题文字,使用JButton
显示,最小化,最大化和关闭按钮。
我还建议将按钮分组并定位标题文本,使标题栏看起来类似于计算机上显示的操作系统
4)[可选]您可以将ActionListener
附加到按钮以呈现窗口行为。这包括setState()
用于最小化和setExtendedState
用于最大化。关闭窗口会为应用程序提供两个选项System.exit(0)
,为applet提供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
侦听器。隐藏和禁用此按钮将自然禁用此功能
我希望这会有所帮助。