我希望有一个内部(不窗口)对话,要求会员输入。我想该对话将放入集中在现有的JPanel.

我已经看过了 layeredpanes 这些似乎无法使用,因为只具有单一管理局(或者没有布局管理)在所有的窗格。我想我可以尝到复盖JLayeredPane,并提供一个定制的布局,但这似乎是极端的。

玻璃窗 似乎不是适当的。

怎么可以这样做?是没有可用的概念z-索引的,在摇摆吗?

编辑

原因的分层的窗格是不适当的是,由于缺乏一个局管理,每层。小组调整大小,小组的一个应该住在100%的区和小组B应该保持集中。

有帮助吗?

解决方案

我想的layeredPane这里是您最好的选择。你会需要第三面板虽然以包含A和B这第三个小组将的layeredPane然后面板A和B仍然可以有一个很好的布局管理。所有你需要做的就是在中心B,有相当多的关于如何做到这一点的摇摆线索的例子。 教程没有一个LayoutManager 定位。

public class Main {
    private JFrame frame = new JFrame();
    private JLayeredPane lpane = new JLayeredPane();
    private JPanel panelBlue = new JPanel();
    private JPanel panelGreen = new JPanel();
    public Main()
    {
        frame.setPreferredSize(new Dimension(600, 400));
        frame.setLayout(new BorderLayout());
        frame.add(lpane, BorderLayout.CENTER);
        lpane.setBounds(0, 0, 600, 400);
        panelBlue.setBackground(Color.BLUE);
        panelBlue.setBounds(0, 0, 600, 400);
        panelBlue.setOpaque(true);
        panelGreen.setBackground(Color.GREEN);
        panelGreen.setBounds(200, 100, 100, 100);
        panelGreen.setOpaque(true);
        lpane.add(panelBlue, new Integer(0), 0);
        lpane.add(panelGreen, new Integer(1), 0);
        frame.pack();
        frame.setVisible(true);
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new Main();
    }

}

您使用的setBounds于面板定位在分层窗格内,并且还设置其大小。

修改,以反映改变原始交 你将需要添加其检测当父容器被调整大小,然后动态地改变面板A和B的边界组件侦听。

其他提示

我只是想,我想补充一点,还有 一个概念Z-order在摆动,请参阅 [java。awt.分#setComponentZOrder][1]

这会影响职位的一个组件在其父母组件阵列,它确定该画的顺序。

注意,你应该复盖 内摇摆。JComponent#isOptimizedDrawingEnabled 回虚假的父容器中得到您的重叠的组成重新绘制正确的,否则他们重新绘制,将破坏。(JComponents假设没有任何重叠的儿童除非isOptimizedDrawingEnabled返回false)

[1]: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Container.html#setComponentZOrder(java.awt.Component,int)

可以添加未修饰的JDialog这样的:

import java.awt.event.*;

import javax.swing.*;

public class TestSwing {
  public static void main(String[] args) throws Exception {
    JFrame frame = new JFrame("Parent");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(800, 600);
    frame.setVisible(true);

    final JDialog dialog = new JDialog(frame, "Child", true);    
    dialog.setSize(300, 200);
    dialog.setLocationRelativeTo(frame);
    JButton button = new JButton("Button");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.dispose();
      }
    });
    dialog.add(button);
    dialog.setUndecorated(true);
    dialog.setVisible(true);
  }
}

在现有的JPanel使用1由1 GridLayout的,那么你的面板添加到该JPanel的。与网格布局由1是1唯一的问题是,你将不能够放在JPanel的其他项目。在这种情况下,你将不得不找出一个布局是合适的。每次你使用可以使用自己的布局,这样就不会成为一个问题板。

我是正确认识这个问题?

JOptionPane.showInternalInputDialog也许你想要做什么。如果不是,这将有助于理解它是错过了什么。

还有一个布局管理器,可能是准备在这里:的叠加布局 这里有一个简单的教程: OverlayLayout:对于组件的布局管理是一个挨一个的顶部。 覆盖布局允许您在彼此的顶部位置面板,并设置每个面板的内部布局。你还可以分别设定每个面板的大小和位置。

(我是从几年前回答这个问题的原因是因为我在同样的问题迷迷糊糊的,我看到很少的叠加布局在计算器上的提及,而这似乎是非常有据可查的。希望这可以帮助别人谁不断寻找它。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top