最小化Jinternal框架而不单击按钮

有没有办法最小化/最大化JinternalFrame而不点击jinternalframe右上角的最小化/最大化按钮?

我按照这个线程以编程方式最小化了一个JInternalFrame? ,特别设定

jinterframe.setIcon(false) 

但我没有工作。

谢谢。

按照我的预期工作,你必须检查JInternalFrame#isIconifiable() (eeerght这个Veto真的是****)

在此处输入图像描述

 import java.awt.*; import java.awt.event.*; import java.beans.PropertyVetoException; import javax.swing.*; import javax.swing.plaf.basic.*; public class InternalFrameUnMovable extends JFrame { private static final long serialVersionUID = 1L; public JDesktopPane desktop; public InternalFrameUnMovable() { desktop = new JDesktopPane(); getContentPane().add(desktop); desktop.add(createInternalFrame(1, Color.RED)); desktop.add(createInternalFrame(2, Color.GREEN)); desktop.add(createInternalFrame(3, Color.BLUE)); } private JInternalFrame createInternalFrame(int number, Color background) { JInternalFrame internal = new JInternalFrame("Frame" + number, true, true, true, true); internal.setBackground(background); internal.setVisible(true); int location = 50 * number; internal.setBounds(location, location, 300, 300); return internal; } public static void main(String args[]) throws PropertyVetoException { InternalFrameUnMovable frame = new InternalFrameUnMovable(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setSize(600, 600); frame.setLocationRelativeTo(null); frame.setVisible(true); try {// Activate first internal frame JInternalFrame[] frames = frame.desktop.getAllFrames(); frames[0].setSelected(true); } catch (java.beans.PropertyVetoException e) { } JInternalFrame[] frames = frame.desktop.getAllFrames();// Make first internal frame unmovable for (int i = 0; i < frames.length; i++) { JInternalFrame f = frames[i]; if (f.isIconifiable()) { f.setIcon(true); } } /*JInternalFrame f = frames[0]; BasicInternalFrameUI ui = (BasicInternalFrameUI) f.getUI(); Component north = ui.getNorthPane(); //MouseMotionListener[] actions = (MouseMotionListener[]) north.getListeners(MouseMotionListener.class); MouseMotionListener[] actions = north.getListeners(MouseMotionListener.class); for (int i = 0; i < actions.length; i++) { north.removeMouseMotionListener(actions[i]); }*/ } } 

方法getAllFrames() “返回图标化的帧以及扩展的帧。” 在Mac OS X上,可以忽略图标化的帧。 下面的示例演示了exception,并使用List进行补偿。

正常图标化

 import java.awt.*; import java.awt.event.*; import java.beans.PropertyVetoException; import java.util.ArrayList; import java.util.List; import javax.swing.*; /** * @see http://stackoverflow.com/q/9414728/230513 * @see http://stackoverflow.com/a/9415197/230513 */ public class InternalFrameCount extends JFrame { private static final int SIZE = 300; private static final String ICONIFY = "Iconify"; private static final String RESTORE = "Restore"; private static final String COUNT = "Count:"; private JDesktopPane desktop = new JDesktopPane(); private JLabel count = new JLabel(COUNT); private List list = new ArrayList(); public InternalFrameCount() { desktop.add(createInternalFrame(1, Color.RED)); desktop.add(createInternalFrame(2, Color.GREEN)); desktop.add(createInternalFrame(3, Color.BLUE)); this.add(desktop); JPanel panel = new JPanel(); panel.add(new JButton(new ButtonAction(ICONIFY))); panel.add(new JButton(new ButtonAction(RESTORE))); panel.add(count); this.add(panel, BorderLayout.SOUTH); count.setText(COUNT + desktop.getAllFrames().length); } private class ButtonAction extends AbstractAction { private boolean iconify; public ButtonAction(String name) { super(name); iconify = ICONIFY.equals(name); } @Override public void actionPerformed(ActionEvent ae) { for (JInternalFrame jif : list) { try { jif.setIcon(iconify); } catch (PropertyVetoException e) { e.printStackTrace(System.err); } } count.setText(COUNT + desktop.getAllFrames().length); } } private JInternalFrame createInternalFrame(int number, Color background) { JInternalFrame jif = new JInternalFrame( "F" + number, true, true, true, true); list.add(jif); jif.setBackground(background); int topLeft = SIZE / 10 * number; jif.pack(); jif.setBounds(topLeft, topLeft, SIZE / 2, SIZE / 2); jif.setVisible(true); return jif; } public static void main(String args[]) throws PropertyVetoException { System.out.println(System.getProperty("os.name")); System.out.println(System.getProperty("java.runtime.version")); EventQueue.invokeLater(new Runnable() { @Override public void run() { InternalFrameCount frame = new InternalFrameCount(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.pack(); frame.setSize(SIZE, SIZE); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }