Przeszukałem go, ale nie znalazłem prawidłowej odpowiedzi. Mam JPanel
i chcę mieć gradient, który pochodzi od góry do dołu. Po prostu użyję dwóch kolorów. Jak mogę to osiągnąć?JPanel gradientowe tło
Odpowiedz
Proszę bardzo:
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 przykład, chociaż Id sugeruje nadpisanie 'getPreferredSize()' 'JPanel' i wywołanie' pack() 'na' JFrame' zamiast wywoływania 'setSize (..)' –
@DavidKroukamp wywołania 'setSize()' ma mieć coś widocznego na ekranie. Nie chcę w tym przypadku przesłonić 'getPreferredSize()', ponieważ rozumiem, że Panel będzie później faktycznie używany do ustawiania LayoutManagera i dodawania komponentów, dlatego też 'getPreferredSize()' powinien być obliczany przez ten LayoutManager i nie arbitralny rozmiar. Tak czy inaczej, to jest po prostu szarpanie i uważam, że oba rozwiązania są do przyjęcia w równym stopniu. –
Ja osobiście preferuję LinearGradientPaint osobiście, ale to zależy od potrzeb;) – MadProgrammer
hej Bebbie można użyć to:
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());
}
};
nadzieja, że pomoc; można również powrót do tego artical Aby uzyskać więcej pomocy: Gradient background to any jcomponent
. Dobrze, że jesteś na tyle uczciwy, by połączyć się ze źródłem. Jednak źródło ma to poprawne i zmodyfikowałeś go w niewłaściwy sposób. Podpowiedź: 'JComponent.setOpaque (fałsz);' jest kluczowym czynnikiem i 'super.paintComponent (grphcs);' musi być ostatnim wywołaniem. W przeciwnym razie twój kod nie będzie działał ze wszystkimi obiektami "JComponent", a także nie będzie odporny na jakiekolwiek przyszłe zmiany. Ale dzięki za wskazówkę. –
http://docs.oracle.com/javase/1.4.2/docs/api/java/ awt/GradientPaint.html – MikeTheLiar
I Googled dla "swing jpanel gradient koloru tła" i jest to pierwsze łącze: http://www.javarichclient.com/how-to-add-a-gradient-background-to-any-jcomponent/Wygląda na to, że mam informację o tym, –