2012-10-19 2 views
2

Windows Vista/7 UAC 동의 블록과 같은 "보안 데스크탑 모드"(효과)를 얻는 방법을 지금 누구에게 있습니까?Java 응용 프로그램의 보안 데스크탑 모드 효과

필자는 여기 저기에있는 픽셀을 제거하고 (어쩌면 회색으로 표시하는) 몇 가지 기능을 수행하고 나서 마지막으로 화면에 그려주는 기능을한다고 가정합니다 ... 사용자가 계속하지 못하게하려면 응용 프로그램에 적용하고 싶습니다. 다른 사용자가 시스템에 연결할 때까지는 아무 것도 없지만 (그 점 이외에는)

정말 조언을 부탁드립니다.

종류는

편집에 관하여 : 난 정말에만이

 graphicsFX.setColor(new Color(0, 0, 0, 0.8f)); 
     graphicsFX.fillRect(0, 0, 800, 600); 

내가 아주 잘 할 수있는 입력의 defering을 찾고 있었다 ... 모든

감사합니다 ....

+3

보십시오 유리 평면 http://stackoverflow.com/questions/3886264/non-blocking에 대한 기본적인 아이디어를 훔쳐)이 컨테이너 유리 창처럼 -modal-swing-progress-dialog –

+0

@ j-mcnally : 내가 받아 들일 수 있도록 답변으로 의견을 게시하십시오 - 그 링크의 링크는 저에게 아이디어를주었습니다 ... 명성 –

+0

기술적으로 귀하의 질문은 일종의 중복. 그냥 다른 방식으로 물었다. 귀하의 질문을 제거하고, 그냥 중복을 upvoting하는 것이 좋습니다. –

답변

5

우리는이 정확한 목적을 위해 JXLayer를 사용

enter image description hereenter image description here

이를 :

은/취소 클릭 JButton 회색 더있는 this 예를 보여줍니다 참조과 같이 응용 프로그램을 잠그지 않고 지정된 컨테이너에서 사용자를 잠그면 정말 유용합니다.해결책이 있습니다.

내가 here

public class JXLayerTest { 

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

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

        final LockableUI ui = new LockableUI(); 
        JPanel panel = new JPanel(new GridBagLayout()); 
        buildUI(panel); 

        // This stolen directly from the JXLayer lockable blog       
        JXLayer layer = new JXLayer(panel, ui); 

        // Java2D grayScale BufferedImageOp 
        ColorConvertOp grayScale = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
        // wrap it with the jxlayer's BufferedImageOpEffect 
        BufferedImageOpEffect effect = new BufferedImageOpEffect(grayScale); 
        // set it as the locked effect   
        ui.setLockedEffects(effect); 
        ui.setLocked(false); 

        JFrame frame = new JFrame(); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setLayout(new BorderLayout()); 
        frame.add(layer); 

        JPanel panelButtons = new JPanel(new GridBagLayout()); 

        final JButton lock = new JButton("Lock"); 
        lock.addActionListener(new ActionListener() { 
          @Override 
          public void actionPerformed(ActionEvent e) { 
           boolean locked = !ui.isLocked(); 
           ui.setLocked(locked); 
           lock.setText(locked ? "Unlock" : "Lock"); 

          } 
        }); 

        panelButtons.add(lock); 
        frame.add(panelButtons, BorderLayout.SOUTH); 

        frame.pack(); 
        frame.setLocationRelativeTo(null); 
        frame.setVisible(true); 
       } 

       protected void buildUI(JPanel panel) { 
        GridBagConstraints gbc = new GridBagConstraints(); 
        gbc.gridx = 0; 
        gbc.gridy = 0; 

        JLabel label = new JLabel(); 
        try { 
          BufferedImage image = ImageIO.read(new File("megatokyo.png")); 
          label.setIcon(new ImageIcon(image)); 
        } catch (IOException ex) { 
          label.setText("Nothing to see here"); 
        } 

        panel.add(label, gbc); 

        JButton button = new JButton("Clickl me"); 
        button.addActionListener(new ActionListener() { 
          @Override 
          public void actionPerformed(ActionEvent e) { 
           JOptionPane.showMessageDialog(null, "Clicked"); 
          } 
        }); 

        gbc.gridy++; 
        panel.add(button, gbc); 

       } 
      }); 
     } 
} 
+0

+1 예와 JXLayer를 좋아합니다 :) –

+1

@DavidKroukamp 언제나 내가 처음 설정을 시작할 때 레이어와 레이어에서 패널을 래핑하기 시작합니다. P - 일단 알았다면 설치, 끝내주는 것입니다 – MadProgrammer

+0

+1 좋은 예! :) – tenorsax

3

바퀴를 다시 발명하는 대신구성 요소에을 사용하지 않도록 설정하고 시스템에 연결되면 setEnabled(true)을 호출하여 구성 요소를 다시 활성화합니다. ...

enter image description here

+1

이것은 실제로 제가 의미했던 것이 아닙니다.하지만이 효과를 너무 좋아해서이 방법을 사용하여 입력을 거부하려고합니다. –

+0

@AidenStrydom + 1 기꺼이 도와 드리겠습니다. –