java 面板容器_java-如何最小化容器内的面板

我有三个关闭按钮,最小和最大.

当我想最大化它时,它将采用主容器的形状并与所有面板重叠,当我关闭它时,只有该面板会受到影响.但是,当我按下最小按钮时,它将最小化到我不想要的任务栏.

当您单击最小化按钮,然后在主框架内将其最小化时,我希望它像internalFrame一样位于conatiner中.

这是代码

package Project;

import java.awt.Color;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JComponent;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.SwingUtilities;

import javax.swing.border.LineBorder;

public class MinPanel {

public MinPanel() {

createAndShowGui();

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

new MinPanel();

}

});

}

private void createAndShowGui() {

JFrame frame = new JFrame();

frame.setSize(300, 500);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JPanel mainPanel = new JPanel(new GridLayout(2, 2));

for (int i = 0; i < 4; i++) {

final int num = i;

OmniPanel op = new OmniPanel(mainPanel, frame) {

@Override

public JPanel createPanel() {

JPanel p = createSimplePanelInterface();

p.add(new JLabel("Panel " + (num + 1)));

return p;

}

@Override

void toPanel() {

super.toPanel();

System.out.println("Frame requested to be brought to panel");

}

};

mainPanel.add(op.getPanel());

}

frame.add(mainPanel);

//frame.pack();

frame.setVisible(true);

}

}

abstract class OmniPanel {

protected JFrame frame;

protected JPanel panel;

boolean maximized = false;

private final JComponent owner;

private final JFrame ownerFrame;

public OmniPanel(JComponent owner, JFrame con) {

this.owner = owner;

initOmniPanel();

this.ownerFrame = con;

}

private void initOmniPanel() {

panel = createPanel();

createFrame();

frame.addWindowListener(new WindowAdapter() {

@Override

public void windowDeiconified(WindowEvent we) {

super.windowDeiconified(we);

toPanel();

}

});

}

public JPanel getPanel() {

return panel;

}

public JFrame getFrame() {

return frame;

}

public boolean goFrame() {

frame.add(panel);

frame.pack();

frame.setState(JFrame.ICONIFIED);

frame.setVisible(true);

return true;

}

protected void createFrame() {

frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

}

void toPanel() {

frame.remove(panel);

frame.dispose();

owner.add(panel);

owner.revalidate();

owner.repaint();

}

public JPanel createSimplePanelInterface() {

JPanel p = new JPanel();

JButton close = new JButton("X");

JButton minimize = new JButton("_");

JButton maximize = new JButton("[]");

p.add(close);

p.add(minimize);

p.add(maximize);

close.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent ae) {

if (maximized) {

maximized = false;

ownerFrame.setGlassPane(new JComponent() {

});

ownerFrame.revalidate();

ownerFrame.repaint();

} else {

removePanelFromOwner();

getFrame().dispose();

}

}

});

minimize.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent ae) {

if (maximized) {

maximized = false;

ownerFrame.setGlassPane(new JComponent() {

});

owner.add(panel);

owner.revalidate();

owner.repaint();

ownerFrame.revalidate();

ownerFrame.repaint();

} else {

removePanelFromOwner();

goFrame();

frame.setState(Frame.ICONIFIED);

}

}

});

maximize.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent ae) {

if (maximized) {

return;

}

maximized = true;

removePanelFromOwner();

ownerFrame.setGlassPane(panel);

ownerFrame.revalidate();

ownerFrame.repaint();

panel.setVisible(true);//

}

});

p.setBorder(new LineBorder(Color.black));

return p;

}

private void removePanelFromOwner() {

owner.remove(getPanel());

owner.revalidate();

owner.repaint();

}

abstract JPanel createPanel();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值