Je suis en train de faire des têtes et des queues de votre code ...
Vous ne parvenez pas à appeler super.paintComponent
... cela pourrait vous conduire dans un même sérieux problèmes si vous n'êtes pas prudent. règle générale, simplement l'appeler;)
Soyez prudent lorsque l'état de Sa modification un contexte Graphics
, par exemple ...
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
affectera tous les composants peints après celui-ci et pourrait causer quelques intéressantes ensemble problèmes graphiques que vous ne nous attendions pas ...
jf.getGlassPane().setVisible(false);
glassPanel = new GlassPanel();
jf.getGlassPane().setVisible(true);
semble inutile, en tant que composant à l'aide jf.setGlassPane(glassPanel);
sera toujours le composant qui est rendu visible lorsque vous appelez jf.getGlassPane().setVisible(true);
. Cela signifie également que le composant GlassPane
est jamais utilisé ...
isVisible
dans paintComponent
Vérification est inutile, que Swing est assez intelligent pour ne pas savoir peindre des composants invisibles ...
Maintenant, après avoir dit tout cela. ..
Si vous voulez peindre sur le dessus du BlurPanel
vous soit ... le contenu de la peinture après la blurBuffer
est tiré, de sorte que vous dessinez ontop ou ajouter un autre composant sur le volet BlurPanel
qui contient la logique de dessin vous voulez appliquer ...
Ceci est un exemple de base de ce concept. Cela ajoute un autre panneau sur la vitre qui peint le cadre personnalisé du panneau que je veux.
Cet exemple utilise un code de bibliothèque personnel et est conçu comme un exemple du concept seul, et non un exemple complètement exécutable.
import core.ui.GlowEffectFactory;
import core.ui.GraphicsUtilities;
import core.util.ByteFormatter;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
public class TransparentTest {
public static void main(String[] args) {
new TransparentTest();
}
public TransparentTest() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private BufferedImage background;
private BlurredGlassPane blurredGlassPane;
private InfoPane infoPane;
public TestPane() {
try {
background = ImageIO.read(new File("get your own image"));
} catch (IOException ex) {
ex.printStackTrace();
}
blurredGlassPane = new BlurredGlassPane();
blurredGlassPane.setLayout(new GridBagLayout());
infoPane = new InfoPane();
infoPane.setFile(new File("get your own image"));
blurredGlassPane.add(infoPane);
JButton click = new JButton("Click");
click.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Window win = SwingUtilities.getWindowAncestor(TestPane.this);
if (win instanceof JFrame) {
JFrame frame = (JFrame) win;
frame.setGlassPane(blurredGlassPane);
blurredGlassPane.setVisible(true);
}
}
});
setLayout(new GridBagLayout());
add(click);
}
@Override
public Dimension getPreferredSize() {
return background == null ? new Dimension(200, 200) : new Dimension(background.getWidth(), background.getHeight());
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (background != null) {
Graphics2D g2d = (Graphics2D) g.create();
int x = (getWidth() - background.getWidth())/2;
int y = (getHeight() - background.getHeight())/2;
g2d.drawImage(background, x, y, this);
g2d.dispose();
}
}
}
public static class InfoPane extends JPanel {
protected static final int RADIUS = 20;
protected static final int FRAME = 4;
protected static final int INSET = RADIUS + FRAME;
protected static final DateFormat DATE_FORMAT = DateFormat.getDateTimeInstance();
private JLabel name;
private JLabel path;
private JLabel length;
private JLabel lastModified;
private JLabel canExecute;
private JLabel canRead;
private JLabel canWrite;
private JLabel isDirectory;
private JLabel isHidden;
public InfoPane() {
setBorder(new EmptyBorder(INSET, INSET, INSET, INSET));
setOpaque(false);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.gridwidth = GridBagConstraints.REMAINDER;
name = createLabel(Font.BOLD, 48);
add(name, gbc);
gbc.gridy++;
path = createLabel();
add(path, gbc);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.WEST;
length = createLabel();
lastModified = createLabel();
add(createLabel("Size: "), gbc);
gbc.gridx++;
gbc.insets = new Insets(0, 0, 0, 10);
add(length, gbc);
gbc.insets = new Insets(0, 0, 0, 0);
gbc.gridx++;
add(createLabel("Last Modified: "), gbc);
gbc.gridx++;
add(lastModified, gbc);
}
public JLabel createLabel(String text) {
JLabel label = new JLabel(text);
label.setForeground(Color.WHITE);
return label;
}
public JLabel createLabel() {
return createLabel("");
}
public JLabel createLabel(int style, float size) {
JLabel label = createLabel();
label.setFont(label.getFont().deriveFont(style, size));
return label;
}
public void setFile(File file) {
name.setText(file.getName());
try {
path.setText(file.getParentFile().getCanonicalPath());
} catch (IOException ex) {
ex.printStackTrace();
}
length.setText(ByteFormatter.format(file.length()));
lastModified.setText(DATE_FORMAT.format(new Date(file.lastModified())));
file.canExecute();
file.canRead();
file.canWrite();
file.isDirectory();
file.isHidden();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
GraphicsUtilities.applyQualityRenderingHints(g2d);
int width = getWidth() - 1;
int height = getHeight() - 1;
int buffer = FRAME/2;
RoundRectangle2D base = new RoundRectangle2D.Double(buffer, buffer, width - FRAME, height - FRAME, RADIUS, RADIUS);
g2d.setColor(new Color(0, 0, 0, 128));
g2d.fill(base);
g2d.setColor(Color.WHITE);
g2d.setStroke(new BasicStroke(FRAME, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2d.draw(base);
g2d.dispose();
}
}
public class BlurredGlassPane extends JPanel {
private BufferedImage background;
@Override
public void setVisible(boolean visible) {
if (visible) {
Container parent = SwingUtilities.getAncestorOfClass(JRootPane.class, this);
if (parent != null) {
JRootPane rootPane = (JRootPane) parent;
BufferedImage img = new BufferedImage(rootPane.getWidth(), rootPane.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
rootPane.printAll(g2d);
g2d.dispose();
background = GlowEffectFactory.generateBlur(img, 40);
}
}
super.setVisible(visible);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(background, 0, 0, this);
}
}
}
Pour une meilleure aide plus tôt, un poster [MCVE] (http://stackoverflow.com/help/mcve) (minimale et complète Vérifiable Exemple). Et s'il vous plaît clarifier re la capture d'écran. Est-ce l'effet désiré ou ce que vous obtenez maintenant? Si 'maintenant', qu'est-ce qui ne va pas? –
Parlez du lien vers votre lecteur de partage Google. Peu de gens le suivront, encore moins «demanderont l'accès». Au moins, les gens la courtoisie de marquer le fichier de partage comme «public» à toute personne ayant le lien. –
@AndrewThompson c'est la sortie désirée et cette sortie devrait venir. Je suis capable de créer un rectangle transparent et un arrière-plan flou mais je n'ai aucune idée de comment les fusionner. Et désolé de ne pas partager le fichier comme «public» –