2014-12-30 8 views
0

나는 피아노 인터페이스를 만들고 있는데, 사용자가 흰색 키를 클릭하면 밝은 회색으로 바뀌고, 그런 다음 그것을 놓을 때 만들어 지려고합니다. 키를 누르면 흰색 키가 전경으로 보이며 검은 색 키는 숨겨집니다. 몇 개의 키를 클릭하면LayeredPane을 사용하여 아래 창틀의 배경색을 변경하면 전경색으로 바뀝니 까?

http://i.imgur.com/gwZAbJV.png

:

아무것도 클릭하기 전에

http://i.imgur.com/Ax7dw6w.png

키가 JLayeredPanel 내부 JPanel의하고 나는를 변경하는 배경 색상을 설정하고있어 색깔. 맨 아래 키를 클릭하면 검은 색 키가 맨 위에 머물러있게하고 싶습니다. 내가 이것을 할 수있는 방법이 있습니까? Netbeans GUI 빌더를 사용 중입니다.

+0

의 사용은 그렇지 않으면 그냥 경우에 서로

중복되며, 각 구성 요소가 상주 할 레이어를 지정해야 레이어링? 문제를 나타내는 코드의 실행 가능한 예제를 제공하십시오. – MadProgrammer

답변

2

How to Use Layered Panes을 자세히 살펴보십시오. 당신은 어떻게 당신에게 설정이 당신이 그것을 그리워, 여기에 그들이 핵심 요소는 JLayeredPane#setLayer

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JLayeredPane; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.LineBorder; 

public class TestLayer { 

    public static void main(String[] args) { 
     new TestLayer(); 
    } 

    public TestLayer() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JLayeredPane { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      ColorPane background = new ColorPane(Color.WHITE) { 
       @Override 
       public Dimension getPreferredSize() { 
        return new Dimension(200, 200); 
       } 
      }; 
      ColorPane foreground = new ColorPane(Color.BLACK) { 
       @Override 
       public Dimension getPreferredSize() { 
        return new Dimension(100, 100); 
       } 
      }; 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      add(background, gbc); 
      setLayer(background, 0); 

      add(foreground, gbc); 
      setLayer(foreground, 1); 
     } 

     @Override 
     public void doLayout() { 
      super.doLayout(); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     public class ColorPane extends JPanel { 

      public ColorPane(Color backGround) { 
       setBackground(backGround); 
       setBorder(new LineBorder(Color.RED)); 
       addMouseListener(new MouseAdapter() { 
        @Override 
        public void mousePressed(MouseEvent e) { 
         setBackground(Color.RED); 
        } 

        @Override 
        public void mouseReleased(MouseEvent e) { 
         setBackground(backGround); 
        } 

       }); 
      } 

     } 

    } 

}