Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void main(String[] args) {
- JFrame frame = new JFrame();
- frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- JPanel main = new JPanel();
- main.setBackground(Color.GREEN);
- JPanel transparencyPanel = new JPanel();
- transparencyPanel.setPreferredSize(new Dimension(200, 200));
- transparencyPanel.setBorder(BorderFactory.createLineBorder(Color.black));
- transparencyPanel.setOpaque(false);
- main.add(transparencyPanel, BorderLayout.CENTER);
- JCheckBox changeTranslucency = new JCheckBox("Сделать полупрозрачность");
- changeTranslucency.addChangeListener(new ChangeListener() {
- @Override
- public void stateChanged(ChangeEvent e) {
- Graphics2D g2d = (Graphics2D) transparencyPanel.getGraphics();
- g2d.setComposite(changeTranslucency.isSelected() ? AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f) :
- AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0f));
- g2d.setColor(transparencyPanel.getBackground());
- g2d.fillRect(0, 0, transparencyPanel.getWidth(), transparencyPanel.getHeight());
- transparencyPanel.repaint();
- }
- });
- main.add(changeTranslucency, BorderLayout.SOUTH);
- frame.add(main, BorderLayout.CENTER);
- frame.setSize(300, 400);
- frame.setVisible(true);
- }
- // новый класс
- class TransparentPanel extends JPanel {
- private boolean translucent = false;
- {
- setOpaque( false ); // false означает, что панель не гарантирует
- // что закрасит все пространство сплошным цветом
- // swing будет предварительно отрисовывать нижележащие
- // компоненты
- }
- public void setTranslucent( boolean value ) {
- if ( value != translucent ) {
- translucent = value;
- repaint(); // если свойство изменилось, запрашиваем перерисовку
- }
- }
- @Override
- // здесь ваш код рисования
- public void paintComponent(Graphics g) {
- Graphics2D g2d = (Graphics2D)g.create();
- g2d.setComposite( translucent ? // выбор композита
- AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f) :
- AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0f)
- );
- g2d.setColor( getBackground() );
- g2d.fillRect(0, 0, getWidth(), getHeight());
- g2d.dispose();
- }
- }
- public class TransparentPanelExample {
- private static void createUi() {
- JFrame frame = new JFrame();
- frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- JPanel main = new JPanel() {
- @Override public void paintComponent( Graphics g ) {
- // рисуем панель в полоску, чтобы была видна прозрачность
- Graphics2D g2d = (Graphics2D)g.create();
- g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
- g2d.setPaint( new LinearGradientPaint( 0f, 0f, 20f, 20f,
- new float[] {.49f, .50f},
- new Color[] {Color.YELLOW, Color.ORANGE},
- CycleMethod.REPEAT )
- );
- g2d.fillRect( 0, 0, getWidth(), getHeight() );
- g2d.dispose();
- }
- };
- JCheckBox changeTranslucency = new JCheckBox("Сделать полупрозрачность");
- TransparentPanel transparencyPanel = new TransparentPanel();
- transparencyPanel.setBackground( Color.GREEN );
- transparencyPanel.setPreferredSize(new Dimension(200, 200));
- transparencyPanel.setBorder(BorderFactory.createLineBorder(Color.black));
- main.add(transparencyPanel, BorderLayout.CENTER);
- changeTranslucency.addActionListener(
- e -> transparencyPanel.setTranslucent( changeTranslucency.isSelected() )
- );
- main.add(changeTranslucency, BorderLayout.SOUTH);
- frame.add(main, BorderLayout.CENTER);
- frame.setSize(300, 400);
- frame.setVisible(true);
- }
- public static void main(String[] args) {
- SwingUtilities.invokeLater( TransparentPanelExample::createUi );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement