JFrames'imi bulanıklaştırmaya çalışıyorum. Fikir, JLraer/LayerUI kullanarak bir JFrame içindeki tüm bileşenleri/denetimleri bulanıklaştırmaktır.Swing ve JLayer <> kullanarak Java'da bulanık bir JFrame/JDialog nasıl oluşturulur?
Bu bulanıklık efekti yapar LayerUI sınıftır:
import java.awt.Component;
import javax.swing.JLayer;
public class BlurryTest extends javax.swing.JFrame {
public BlurryTest() {
initComponents();
// what do I have to do here to blurry this JFrame ... ??
JLayer<Component> blurLayer = new JLayer<>(this.getLayeredPane(), new BlurLayerUI());
//this.add(blurLayer);
//this.setGlassPane(blurLayer);
//this.getGlassPane().setVisible(true);
}
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jCheckBox1 = new javax.swing.JCheckBox();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("jButton1");
jButton2.setText("jButton2");
jCheckBox1.setText("jCheckBox1");
jTextField1.setText("jTextField1");
jTextField2.setText("jTextField2");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 234, Short.MAX_VALUE)
.addComponent(jButton1))
.addComponent(jTextField1)
.addComponent(jCheckBox1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextField2))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jCheckBox1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 69, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap())
);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new BlurryTest().setVisible(true);
}
});
}
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
}
: Burada
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import javax.swing.JComponent;
import javax.swing.plaf.LayerUI;
public class BlurLayerUI extends LayerUI<Component> {
private BufferedImage mOffscreenImage;
private final BufferedImageOp mOperation;
public BlurLayerUI() {
int blurValue = 6;
int blurCount = blurValue*blurValue;
float ninth = 1.0f/blurCount;
float[] blurKernel = new float[blurCount];
for(int i=0; i<blurCount; i++) {
blurKernel[i] = ninth;
}
mOperation = new ConvolveOp(new Kernel(blurValue, blurValue, blurKernel), ConvolveOp.EDGE_NO_OP, null);
}
@Override
public void paint (Graphics g, JComponent c) {
int w = c.getWidth();
int h = c.getHeight();
if(w == 0 || h == 0) {
return;
}
// only create the offscreen image if the one we have is the wrong size.
if(mOffscreenImage == null || mOffscreenImage.getWidth() != w || mOffscreenImage.getHeight() != h) {
mOffscreenImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
}
Graphics2D ig2 = mOffscreenImage.createGraphics();
ig2.setClip(g.getClip());
super.paint(ig2, c);
ig2.dispose();
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(mOffscreenImage, mOperation, 0, 0);
}
}
... ve bir JFrame yaratan bir test sınıfı var Burada şimdiye kadar yapmış ne Sorun, sınıfın yapıcısı içindedir. JFrame'in tüm içeriğini bulanıklaştırmak için LayerUI nesnesini sağlayan JLayer nesnesini nasıl oluşturmak zorundayım?
Herhangi bir yardım son derece takdir - teşekkürler! mükemmel çalışıyor -
Büyük ... kullanmayı deneyin, çerçeveler
contentPane
doğrudaneklenir! Çok teşekkür ederim! – salocinx
Günümü kurtardın! teşekkür ederim ! – kylexy1357
Blurr'i kapatın ve tüm bileşenleri normal olarak sıfırlayın. –