分层面板GUI

时间:2015-03-31 14:56:19

标签: java swing jlayeredpane

我正在尝试为其他乐器标签制作者制作键盘。 我设置钢琴的方式是使用分层面板。我现在遇到的问题是,每当我尝试添加与钢琴本身分开的任何其他东西时,它都没有出现或者钢琴没有出现,它会出现? 所以我要问的是如何在保持其他一切完整的同时将图像添加到屏幕的右侧? 谢谢。 P.s我知道黑色按钮很乱,请忽略它。

enter image description here

class Piano extends JPanel
{

    public static void main(String[] args)
    {

        JFrame frame = new JFrame("Test");
        JLayeredPane panel = new JLayeredPane();
        frame.add(panel);

        for (int i = 0; i < 13; i++)
        {
            JButton b = new JButton();
            b.setBackground(Color.WHITE);
            b.setLocation(i * 20, 0);
            b.setSize(20, 100);
            panel.add(b, 0, -1);
        }
        JButton b = new JButton();
        b.setBackground(Color.BLACK);
        b.setLocation(16, 0);
        b.setSize(12, 80);
        panel.add(b, 1, -1);
        //
        JButton b1 = new JButton();
        b1.setBackground(Color.BLACK);
        b1.setLocation(52, 0);
        b1.setSize(12, 80);
        panel.add(b1, 1, -1);
        JButton b2 = new JButton();
        b2.setBackground(Color.BLACK);
        b2.setLocation(76, 0);
        b2.setSize(12, 80);
        panel.add(b2, 1, -1);
        //
        JButton b3 = new JButton();
        b3.setBackground(Color.BLACK);
        b3.setLocation(112, 0);
        b3.setSize(12, 80);
        panel.add(b3, 1, -1);
        JButton b4 = new JButton();
        b4.setBackground(Color.BLACK);
        b4.setLocation(134, 0);
        b4.setSize(12, 80);
        panel.add(b4, 1, -1);
        JButton b5 = new JButton();
        b5.setBackground(Color.BLACK);
        b5.setLocation(157, 0);
        b5.setSize(12, 80);
        panel.add(b5, 1, -1);
        //
        JButton b6 = new JButton();
        b6.setBackground(Color.BLACK);
        b6.setLocation(192, 0);
        b6.setSize(12, 80);
        panel.add(b6, 1, -1);
        JButton b7 = new JButton();
        b7.setBackground(Color.BLACK);
        b7.setLocation(216, 0);
        b7.setSize(12, 80);
        panel.add(b7, 1, -1);
        //
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:0)

您实际上想要为Layout使用JPanel,例如一个GridLayout

e.g。不便。像这样

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(0,2));

Here is a example in the oracle doc

答案 1 :(得分:0)

默认情况下,JFrame使用BorderLayout

frame.add(panel);

如果未指定约束,则使用“CENTER”,因此您将分层窗格添加到框架的CENTER。

如果您想在框架的右侧添加另一个面板,那么您可以执行以下操作:

JPanel right = new JPanel();
right.add(...);
frame.add(right, BorderLayout.EAST);

阅读Layout Managers上的Swing教程中的部分以获取更多信息。

您可能还想查看Midi Piano以获得带声音的钢琴键盘的完整实现,只是为了好玩。