degrade arka plan. Bir JPanel
sahibiyim ve bunun aşağıdan yukarıya doğru bir degrade olmasını istiyorum. Ben sadece iki renk kullanacağım. Bunu nasıl başarabilirim?JPanel Ben googled ama hiçbir doğru cevabı bulabiliriz
cevap
gitmek:
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
int w = getWidth();
int h = getHeight();
Color color1 = Color.RED;
Color color2 = Color.GREEN;
GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2);
g2d.setPaint(gp);
g2d.fillRect(0, 0, w, h);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
TestPanel panel = new TestPanel();
frame.add(panel);
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
1 güzel bir örnek, İd geçersiz kılma önermek olsa 'getPreferredSize()' JPanel' 've çağıran' paketi() 'JFrame'' üzerinde oldukça çağırmaktan daha 'setSize (..)' –
@DavidKroukamp 'setSize()' çağrı Ekranda görünür bir şey olması gerekiyordu. Bu durumda getPreferredSize() işlevini geçersiz kılmak istemiyorum çünkü benim anlayışım, Panel'in daha sonra bir LayoutManager ayarlamak ve bileşenleri eklemek için kullanılmaya başlamasıdır, bu nedenle, 'getPreferredSize()' bu LayoutManager tarafından hesaplanmalı ve keyfi bir boyut değil. Her neyse, bu sadece nitpicking ve ben her iki çözümün de eşit derecede kabul edilebilir olduğuna inanıyorum. –
Ben şahsen LinearGradientPaint tercih, ama ihtiyaçlara bağlıdır;) henüz bakmak için bir şans alamadım @MadProgrammer – MadProgrammer
hey Bebbie bunu kullanabilirsiniz:
JPanel contentPane = new JPanel() {
@Override
protected void paintComponent(Graphics grphcs) {
super.paintComponent(grphcs);
Graphics2D g2d = (Graphics2D) grphcs;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
GradientPaint gp = new GradientPaint(0, 0,
getBackground().brighter().brighter(), 0, getHeight(),
getBackground().darker().darker());
g2d.setPaint(gp);
g2d.fillRect(0, 0, getWidth(), getHeight());
}
};
umut yardım olduğunu; da yapabilirsiniz geriye fazla yardım için bu ARTICAL için: İşte Gradient background to any jcomponent
aradım. Kaynağa bağlanacak kadar dürüst olman güzel. Ancak, kaynak doğru ve yanlış bir şekilde değiştirdiniz. İpucu: '(yanlış) JComponent.setOpaque;' önemli bir faktördür ve 'super.paintComponent (grphcs) 'dir;' son çağrı olması gerekiyor. Aksi takdirde, kodunuz tüm 'JComponent' nesneleriyle çalışmaz ve gelecekteki değişikliklerle ilgili olarak da sağlam değildir. Ama işaretçi için teşekkürler. –
http://docs.oracle.com/javase/1.4.2/docs/api/java/ awt/GradientPaint.html – MikeTheLiar
ben "Swing JPanel arka plan rengi gradyan" için Google'da ve bu ilk link: http://www.javarichclient.com/how-to-add-a-gradient-background-to-any-jcomponent/Bu bilgi için BS'yi –