Как мне GradientPaint на нескольких jPanels? - PullRequest
0 голосов
/ 06 мая 2011

У меня есть объект просмотра, который является jPanel и содержит другие jPanels, которые в свою очередь содержат jLabels.Я хочу нарисовать наложение градиента на объекте, чтобы придать ему красивый гладкий вид, а не скучный простой вид.

Моя попытка до сих пор такова:

public class InfoDisplay extends javax.swing.JPanel {


    @Override
     public void paintComponent(Graphics g) {
        UIDefaults uid = UIManager.getDefaults();
        Graphics2D g2d = (Graphics2D)g;

        int w = getWidth();
        int h = getHeight();

        Color lightBlue = new Color(41, 117, 200);
        Color darkBlue = new Color(2, 47, 106);

        if (!isOpaque()) {
            super.paintComponent( g );
            return;
        }

        GradientPaint gp = new GradientPaint(0, 0, lightBlue, 0, h, darkBlue );

        g2d.setPaint(gp);
        g2d.fillRect( 0, 0, w, h );

        setOpaque( false );
        super.paintComponent( g );
        setOpaque( true );
    }
}

Это не такКажется, что это вообще не меняет фон объектов.Я довольно плохо знаком с тем, что не связано с настройками по умолчанию в Gui.

Я использовал конструктор Gui в Netbeans для создания объекта, поэтому initComponents () также находится в классе, но я опубликовалтолько источник, который имеет отношение к вопросу.

Возможно, кто-то может указать мне правильное направление?

1 Ответ

4 голосов
/ 06 мая 2011

Если вы хотите, чтобы фон JPanel использовал градиентную краску, просто используйте его.Не делайте все эти забавные вещи в своем коде с помощью setOpaque и super.paintComponent.например,

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.*;

@SuppressWarnings("serial")
public class GradientPaintPanel extends JPanel {
   private static final Color LIGHT_BLUE = new Color(41, 117, 200);
   private static final Color DARK_BLUE = new Color(2, 47, 106);

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      GradientPaint gradPaint = new GradientPaint(0, 0, LIGHT_BLUE, 0, getHeight(), DARK_BLUE);
      g2.setPaint(gradPaint);
      g2.fillRect(0, 0, getWidth(), getHeight());
   }

   public GradientPaintPanel() {

   }

   private static void createAndShowUI() {
      GradientPaintPanel gradPaintPanel = new GradientPaintPanel();
      gradPaintPanel.setPreferredSize(new Dimension(400, 300));
      JFrame frame = new JFrame("GradientPaintEg");
      frame.getContentPane().add(gradPaintPanel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}
...