Java JTabbedPane嵌入颜色
我想知道你是如何得到JTabbedPane插图的颜色的。我似乎不能染上这种颜色。我每次尝试都会得到236,这是外框的颜色,而内框的颜色大约深10,227227(使用内置的苹果颜色计) 我正在使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())设置外观 你可以在我在网上找到的一张图片中看到这一点。其中“面板标题”一词是指我得到的颜色较浅但对我没有用处的区域。里面的圆角是我试图获得的较深的颜色。我尝试获取内容窗格的颜色,但没有结果 谢谢你的帮助 **编辑:**添加代码!如您所见,我试图获得圆角内区域的颜色(如果您在mac上),而不是边框或显示“1”“2”的标签的颜色。我附上了一张照片,我正试图得到的部分,说“这里”的背景色谢谢 编辑:camickr,这里是UIManager默认设置的屏幕截图。不幸的是,中没有一种颜色与插图中的颜色相同Java JTabbedPane嵌入颜色,java,swing,colors,jframe,jtabbedpane,Java,Swing,Colors,Jframe,Jtabbedpane,我想知道你是如何得到JTabbedPane插图的颜色的。我似乎不能染上这种颜色。我每次尝试都会得到236,这是外框的颜色,而内框的颜色大约深10,227227(使用内置的苹果颜色计) 我正在使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())设置外观 你可以在我在网上找到的一张图片中看到这一点。其中“面板标题”一词是指我得到的颜色较浅但对我没有用处的区域。里面的圆角是我试图获得的较深的颜色。我尝试获取内容窗格的
您可以覆盖
paintComponent()
以在选项卡的背景中使用GradientPaint
,如下所示。几句话,
- 让内容采用it内容的首选大小,如图所示
- 在中构造GUI
- 使用传统的Java名称
选项卡paneui
委托内部使用的颜色。一种办法如下:
- 呈现组件的
,如图所示buffereImage
- 确定
中top
相对于点
顶部的坐标c1
Point p = SwingUtilities.convertPoint(c1, 0, -1, top);
- 使用
获取颜色,如图所示;用于验证结果getRGB()
您可以使用查找颜色。请将您的代码放在这里,这将非常好,我们将很容易为您提供建议:)添加代码!谢谢你的建议!颜色为半渐变色,范围从大约RGB/195195195到大约RGB/208 208 208 208。谢谢您的建议。在我的mac电脑上,当我运行该程序时,当我在屏幕截图上显示“Here”(在这里)的方框的圆角内时,根本没有渐变(使用mac数字颜色计)。问题是我无法静态定义这种颜色,因为在Windows上,这种颜色完全不同。我需要找到一种实用的方法来获得这种颜色,这样我可以在以后的程序中使用它。再次感谢!您好,垃圾神,谢谢您的回复,但我根本不想改变颜色,也不想加入任何渐变。我只是想得到颜色。啊,我看到你想匹配颜色,而不是改变它。我认为
com.apple.laf.AquaLookAndFeel
不会将这种颜色暴露为UIManager
属性。您可以使用机器人
,如图所示。感谢您的回复!我不确定如何在Robot中实现您引用的内容。你能帮我用它来获得颜色吗?运行程序并将鼠标移到感兴趣的区域上以查看颜色;我的代码是0xFFDFDFDF
。我知道颜色代码是什么,问题是每次程序启动时,我都必须在每台计算机上获取此代码。所以每次启动程序时,我都需要有容器背景的颜色。在Mac上,这是灰色的。窗户上几乎是白色的。问题不是一次得到它,而是每次程序启动时得到它。我想做一些类似于jtabpane.getBackground()的事情,但这并没有得到容器的颜色,只是标签的颜色。我需要找到一种方法来获取容器的颜色。再次感谢,希望这一点现在更清楚谢谢你camickr,我编辑了这篇文章,提供了更多关于你回复的信息。
Point p = SwingUtilities.convertPoint(c1, 0, -1, top);
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();
}
});
}
}