2016-09-06 4 views
0

Как сделать вертикальный градиент JPanel. Я использую следующий код, но это горизонтальный градиент.Как сделать вертикальный градиент JPanel?

myPanel.setUI(new PanelUI() { 
     public void paint(Graphics g, JComponent c) { 
      Graphics2D g2 = (Graphics2D) g; 
      g2.setPaint(new GradientPaint(new Point(0, 0), Color.white,new Point(1612, 35), Color.black, false)); 
      g2.fillRect(0, 0, 1000, 35); 
     } 
    }); 
+1

Если вы не можете, в сочетании с Java Docs, понять, как изменить направление градиента, вы должны спросить себя, если вы действительно вырезают для программирования .. –

+1

Попробуйте 0 вместо 1612 в создании второго «Точка». Я не проверял, я оставлю это вам. –

+1

@ OleV.V. Спасибо. Он работает. –

ответ

3

С docs, вы используете конструктор, который просит вас 2 очка и 2-х цветов:

public GradientPaint(Point2D pt1, 
      Color color1, 
      Point2D pt2, 
      Color color2) 

Каждая точка имеет свои собственные X и Y координаты, так что кажется, горизонтальный, потому что вы 'в вашем коде, чтобы нарисовать градиент от точки (0, 0) до точки (1612, 35), но на самом деле это немного диагональ

В этом случае, если вы хотите полностью Tical, либо изменить 1612 на Р2 0 или изменить 0 на P1 до 1612

Он заполнит форму на основе этой конфигурации, я думаю, что вы смущены, думая, что надо рисовать от (0, 0) к (1612, 35) с градиентом, но эти координаты предназначены только для конфигурации градиента, а не для фактической его окраски.

Представьте, что эти коорды являются декартовой картой, что произойдет, если вы нарисуете линию от (0, 0) до (10, 10)? Это диагональный штрих, теперь, что произойдет, если вы нарисуете его от (0, 0) до (10, 0) или от (10, 10) до (20, 10)? Это горизонтальный ход, и что происходит, если вы рисуете линию от (0, 0) до (0, 10) или от (10, 10) до (10, 20)? Это вертикальный удар. Посмотрите, как меняется координация на каждом примере?

  • Для диагональных штрихов оба X и Y Coords изменить

  • Для горизонтальных штрихов просто X изменяет

  • Для вертикальных штрихов только Y изменяет

Итак, это то, что вам нужно сделать :)

+0

для объяснения. Перед этим я не смог понять логику. –

+0

Я рад, что это помогло :) Я предполагаю, что был «танк» (да, я пропустил «h» по назначению) перед «* для объяснения» *; в любом случае, Счастливое программирование – Frakcool