Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. public static void main(String[] args) {
  2. JFrame frame = new JFrame();
  3. frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  4.  
  5. JPanel main = new JPanel();
  6. main.setBackground(Color.GREEN);
  7.  
  8. JPanel transparencyPanel = new JPanel();
  9. transparencyPanel.setPreferredSize(new Dimension(200, 200));
  10. transparencyPanel.setBorder(BorderFactory.createLineBorder(Color.black));
  11. transparencyPanel.setOpaque(false);
  12.  
  13. main.add(transparencyPanel, BorderLayout.CENTER);
  14.  
  15. JCheckBox changeTranslucency = new JCheckBox("Сделать полупрозрачность");
  16. changeTranslucency.addChangeListener(new ChangeListener() {
  17. @Override
  18. public void stateChanged(ChangeEvent e) {
  19. Graphics2D g2d = (Graphics2D) transparencyPanel.getGraphics();
  20. g2d.setComposite(changeTranslucency.isSelected() ? AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f) :
  21. AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0f));
  22.  
  23. g2d.setColor(transparencyPanel.getBackground());
  24. g2d.fillRect(0, 0, transparencyPanel.getWidth(), transparencyPanel.getHeight());
  25.  
  26. transparencyPanel.repaint();
  27. }
  28. });
  29.  
  30. main.add(changeTranslucency, BorderLayout.SOUTH);
  31.  
  32. frame.add(main, BorderLayout.CENTER);
  33.  
  34. frame.setSize(300, 400);
  35. frame.setVisible(true);
  36. }
  37.  
  38. // новый класс
  39. class TransparentPanel extends JPanel {
  40. private boolean translucent = false;
  41.  
  42. {
  43. setOpaque( false ); // false означает, что панель не гарантирует
  44. // что закрасит все пространство сплошным цветом
  45. // swing будет предварительно отрисовывать нижележащие
  46. // компоненты
  47. }
  48.  
  49. public void setTranslucent( boolean value ) {
  50. if ( value != translucent ) {
  51. translucent = value;
  52. repaint(); // если свойство изменилось, запрашиваем перерисовку
  53. }
  54. }
  55.  
  56. @Override
  57. // здесь ваш код рисования
  58. public void paintComponent(Graphics g) {
  59. Graphics2D g2d = (Graphics2D)g.create();
  60. g2d.setComposite( translucent ? // выбор композита
  61. AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f) :
  62. AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0f)
  63. );
  64.  
  65. g2d.setColor( getBackground() );
  66. g2d.fillRect(0, 0, getWidth(), getHeight());
  67. g2d.dispose();
  68. }
  69. }
  70.  
  71. public class TransparentPanelExample {
  72. private static void createUi() {
  73. JFrame frame = new JFrame();
  74. frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  75.  
  76. JPanel main = new JPanel() {
  77. @Override public void paintComponent( Graphics g ) {
  78. // рисуем панель в полоску, чтобы была видна прозрачность
  79. Graphics2D g2d = (Graphics2D)g.create();
  80. g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
  81. g2d.setPaint( new LinearGradientPaint( 0f, 0f, 20f, 20f,
  82. new float[] {.49f, .50f},
  83. new Color[] {Color.YELLOW, Color.ORANGE},
  84. CycleMethod.REPEAT )
  85. );
  86. g2d.fillRect( 0, 0, getWidth(), getHeight() );
  87. g2d.dispose();
  88. }
  89. };
  90.  
  91. JCheckBox changeTranslucency = new JCheckBox("Сделать полупрозрачность");
  92.  
  93. TransparentPanel transparencyPanel = new TransparentPanel();
  94. transparencyPanel.setBackground( Color.GREEN );
  95. transparencyPanel.setPreferredSize(new Dimension(200, 200));
  96. transparencyPanel.setBorder(BorderFactory.createLineBorder(Color.black));
  97.  
  98. main.add(transparencyPanel, BorderLayout.CENTER);
  99.  
  100. changeTranslucency.addActionListener(
  101. e -> transparencyPanel.setTranslucent( changeTranslucency.isSelected() )
  102. );
  103.  
  104. main.add(changeTranslucency, BorderLayout.SOUTH);
  105.  
  106. frame.add(main, BorderLayout.CENTER);
  107.  
  108. frame.setSize(300, 400);
  109. frame.setVisible(true);
  110. }
  111.  
  112. public static void main(String[] args) {
  113. SwingUtilities.invokeLater( TransparentPanelExample::createUi );
  114. }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement