2013-05-18 6 views
3

Мне было интересно, как вы получите цвет вставки JTabbedPane. Я не могу получить этот цвет. Каждая попытка, которую я делаю, я получаю 236,236,236, что является внешним цветом рамки, где внутренний цвет рамки составляет около 10 темнее, 227 227 227 (используя встроенный цветной метр яблока).Java JTabbedPane Inset Color

Я настраиваю внешний вид с помощью UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName());

Вы можете видеть это на изображении, которое я нашел в Интернете. http://pagesofinterest.net/wordpress/wp-content/uploads/2009/06/Quaqua-Maven-Netbeans.jpg Где слова «Название панели» - это область, в которой я получаю более светлый цвет, который мне не пригодится. Внутри круглых углов - более темный цвет, который я пытаюсь получить. Я попытался получить цвет области содержимого безрезультатно.

Спасибо за вашу помощь!

** EDIT: ** Добавлен код! Как вы видите, я пытаюсь получить цвет области внутри закругленных углов (если ваш на mac) не цвет рамки или вкладки, которые говорят «1» «2». Я прикрепил фотографию, и я пытаюсь получить фоновый цвет части, в которой говорится «Вот» Спасибо!

Screenshot

import java.awt.Container; 
import javax.swing.JFrame; 
import javax.swing.JTabbedPane; 
import javax.swing.UIManager; 

public class main { 
JFrame frame; 
Container c1 = new Container(); 
Container c2 = new Container(); 
JTabbedPane top = new JTabbedPane(); 
static main GUI; 
public void createGUI(){ 
    frame = new JFrame(); 
    Container c = frame.getContentPane(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    top = new JTabbedPane(JTabbedPane.TOP); 
    top.setFocusTraversalKeysEnabled(false); 
    top.setFocusable(false); 
    top.addTab("1", c1); 
    top.addTab("2", c2); 
    frame.setSize(315,450); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    frame.setResizable(true); 
    c.add(top); 
    frame.pack(); 
    frame.setVisible(true); 
} 
public static void main(String[] args) { 
    try { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } 
    catch(Exception e) {} 
    GUI = new main(); 
    GUI.createGUI(); 
} 
} 

EDIT: camickr, Вот скриншот Умолчаниях UIManager. К сожалению, ни один из цветов не соответствует правильному цвету вставки.

UI Manager Defaults

+1

Не могли бы вы разместить здесь свой код, это было бы здорово, и нам будет легко дать вам совет :) – CRazyProgrammer

+0

Добавлен код! Спасибо за ваше предложение! – dannyn382

+0

Цвет - полуградиент, от приблизительно RGB/195, 195, 195 до приблизительно RGB/208, 208, 208 – MadProgrammer

ответ

1

Вы можете переопределить paintComponent() использовать GradientPaint в фоновом режиме вкладки, как показано ниже. Несколько замечаний,

  • Пусть содержание принимает предпочтительный размер его содержимого, как показано here.

  • Построить GUI в event dispatch thread.

  • Используйте обычные Java-имена.

Добавление: элементы не всегда в том же месте, так что я не знаю, что место, чтобы получить цвет.

Похоже, вы хотите соответствовать цвету, используемому внутри делегата TabbedPaneUI. Один из подходов будет выглядеть следующим образом:

  • визуализации BufferedImage компонента, как показано here.

  • Определите координаты Point в top по отношению к началу c1.

    Point p = SwingUtilities.convertPoint(c1, 0, -1, top); 
    
  • Получить цвет с помощью getRGB(), как показано here; используйте Zoom, чтобы проверить результат.

Main image

import java.awt.Color; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.awt.GradientPaint; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 

/** @see https://stackoverflow.com/a/16625260/230513 */ 
public class Main { 

    JFrame frame; 
    Container c1 = new GradientPanel(); 
    Container c2 = new GradientPanel(); 
    JTabbedPane top = new JTabbedPane(); 

    private static class GradientPanel extends JPanel { 

     public GradientPanel() { 
      this.add(new JLabel("Here")); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g; 
      GradientPaint p = new GradientPaint(0, 0, Color.white, 
       getWidth(), getHeight(), Color.gray); 
      g2d.setPaint(p); 
      g2d.fillRect(0, 0, getWidth(), getHeight()); 
     } 
    } 

    public void createGUI() { 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     top = new JTabbedPane(JTabbedPane.TOP); 
     top.addTab("1", c1); 
     top.addTab("2", c2); 
     frame.add(top); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Main().createGUI(); 
      } 
     }); 
    } 
} 
+0

Привет, Trashgod, Спасибо за ваш ответ, но я не хочу вообще менять цвет или добавлять градиенты. Я просто хочу получить цвет. – dannyn382

+0

А, я вижу, вы хотите соответствовать цвету, а не изменять его. Я не думаю, что 'com.apple.laf.AquaLookAndFeel' предоставляет этот цвет как свойство' UIManager'. Вы можете использовать «Робот», показанный здесь (http://stackoverflow.com/a/3742841/230513). – trashgod

+0

Спасибо за ваш ответ! Я не уверен, как реализовать то, что вы ссылаетесь в Robot. Не могли бы вы помочь мне использовать это, чтобы получить цвет? – dannyn382

2

Вы можете быть в состоянии использовать UIMangaer Defaults, чтобы найти цвет.

+0

Спасибо, Камикр, я отредактировал OP, чтобы предоставить больше информации, относящейся к вашему ответу. – dannyn382

Смежные вопросы