إذا كنت تتقن Java Abstract Toolkit، فسيتعين عليك تعلم تطبيقات Java AWT Color Class. نظرًا لوجود الكثير من المنشئين والأساليب المستخدمة، فقد يبدو الأمر مخيفًا في البداية. ولكن لا داعي للقلق، فقد قمنا بتغطية احتياجاتك :) باستخدام هذه القائمة الكاملة لـ Java AWT Color، ستتعلم كيفية إنشاء نوع لون جديد وإدارته في لمح البصر. سنقدم أيضًا بعض الاختبارات التدريبية التي ستساعدك على صقل مهاراتك.
ما هي فئة الألوان AWT في جافا؟
الغرض الأساسي من AWT Color هو السماح للمطورين بإنشاء ألوان جديدة باستخدام كود Java باستخدام حزم RGB (الأحمر والأخضر والأزرق) أو RGBA (الأحمر والأخضر والأزرق وألفا) أو HSB (تدرج اللون والتشبع ومكونات BRI). يحتوي الفصل على قيمتين - رمز الظل وقيمة العتامة/الشفافية. إليك كيفية إعلان الفئة java.awt.Color:public class Color
extends Object
implements Paint, Serializable
للإعلان عن أنواع مختلفة من الألوان باستخدام Class.java.awt.Color، يستخدم المطورون المُنشئات - سنلقي نظرة عليها الآن.
AWT. منشئو الألوان في جافا
اعتمادًا على معلمة اللون الذي تريد إنشاءه، ستحتاج إلى استخدام نوع معين من مُنشئ الألوان. هناك عدد قليل منها - دعونا نفحصها واحدة تلو الأخرى.Color(float r, float g, float b)
هي الفئة التي تستخدمها لتحديد لون غير شفاف في نظام ألوان RGB. يمكنك تحديد نطاق الألوان في أي مكان بين 0.0 و0.1.Color(float r, float b, float g, float a)
هي الفئة التي تحدد لون RGBA (نطاق القيم المتاحة هو 0.0 و0.1).Color(ColorSpace c, float[], co, float a)
يحدد لونًا في ColorSpace الذي تحدده مسبقًا. يحدد المطور نطاق مكونات الألوان في المصفوفة العائمة لألفا المحددة.Color(int, rgb)
هي فئة تقوم بإنشاء لون RGB (معتم). تأكد من الانتباه إلى قيمة مكون المنشئ - 16-23 للأحمر، 8-15 للأخضر، 0-7 للأزرق.Color(int r, int g, int b)
- طريقة تستخدم لتحديد لون RGB غير شفاف. يجب أن تتراوح قيمة اللون بين 0 و255.Color(int r, int g, int b, int a)
- إنشاء لون في نظام RGBA (0-255).Color(int rgba, boolean b)
يتم استخدامه لإنشاء ألوان sRGB ضمن قيمة مجمعة محددة. نطاق القيم يمتد 24-31 لألفا، 16-23 للأحمر، 8-15 للأخضر، و0-7 للأزرق.
Java.awt.Transparency
:
TRANSLUCENT
يمثل ما إذا كان اللون يحتوي على قيم ألفا أم لا وله قيمتين - 0 و1.OPAQUE
يعين قيمة ألفا 1 للكائن مما يضمن عتامة كاملة.BITMASK
يمثل قيمة العتامة المطلقة أو الشفافية وتقع ضمن النطاق (0؛1) حيث يمثل 0 شفافية كاملة و1 يمثل عتامة شديدة.
أفضل 15 طريقة للاستخدام مع فئة ألوان Java AWT
لمعالجة اللون، وضبط درجة سطوعه أو قتامةه، يعتمد مطورو Java على أساليب مختلفة. هناك العشرات منها، لذا لا يتعين عليك حفظها جميعًا عن ظهر قلب. ومع ذلك، عندما يتعلق الأمر بطرق Java AWT Color الأكثر استخدامًا على نطاق واسع، فقد قمنا بتضييق القائمة إلى خمسة عشر. إن تذكر هذه الأمور دون الحاجة إلى الرجوع إلى وثائق Java API سيكون مفيدًا للمطورين.أغمق ()
يتم استخدام هذه الطريقة لإنشاء لون جديد يكون نسخة أغمق من اللون الذي حددته بالفعل. مثال :Color.green.darker()
إذا لم يكن التطبيق darker()
مرة واحدة كافيًا للحصول على الظل الذي تحتاجه، فلا تتردد في إعادة تطبيق الطريقة عدة مرات كما تريد، كما هو موضح أدناه:
Color.green.darker().darker().darker().darker().darker()
أكثر إشراقا ()
كما يوحي الاسم،Color brighter()
يتم استخدامه لتفتيح الظل الموجود لديك بالفعل. وبالمثل darker()
، يمكن استخدامه عدة مرات لكل لون واحد. مثال :
Color myColor = Color.RED;
JLabel label = new JLabel("First Name");
label.setForeground(myColor.brighter());
إنت getAlpha ()
إذا كنت تريد إرجاع مكون ألفا الخاص باللون الخاص بك، فاستخدم هذه الطريقة. ضع في اعتبارك أن قيم ألفا تقع ضمن النطاق 0-255. إليك مثال تطبيق الطريقة وإرجاعها. مثال :alpha = Color.black.getAlpha();
return new Color(components[0], components[1], components[2], alpha);
لون ثابت getColor(سلسلة نانومتر)
يمكن لمطوري Java استخدام هذه الطريقة لتحديد لون باستخدام خصائص النظام. هناك طرق أخرى للتعامل مع أهداف مماثلة:static Color getColor(String nm, int v)
static Color getColor(String nm, Color v)
فك تشفير اللون الثابت (سلسلة نانومتر)
يتم استخدام هذه الطريقة لعرض اللون كسلسلة. بعد اكتمال التحويل، سيحصل المطور على لون معتم محدد. مثال :public static Color decodeColor(String hexColor) {
return Color.decode(hexColor);
PaintContext createContext (ColorModel cm، Rectangle r، Rectangle2D r2d، AffineTransform xform، تلميحات RenderingHints)
تبدو هذه الطريقة معقدة ولكن التعامل معها أسهل مما يبدو.Paint Context CreateContext()
يستخدم لتحديد نمط اللون الصلب المتكرر. مثال :
public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds,
AffineTransform xform, RenderingHints hints)
{
try
{
return new AxialShadingContext(shading, cm, xform, matrix, deviceBounds);
}
catch (IOException e)
{
LOG.error("An error occurred while painting", e);
return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints);
}
}
}
float[] getComponents(ColorSpace cspace, float[] compArray)
هذه طريقة Java يمكنك تطبيقها على اللون لإرجاع مصفوفته العائمة ومكونات ألفا. تنطبق الطريقة على معطىColorSpace
محدد بواسطة cspace. مثال :
public float[] getComponents(ColorSpace cspace, float[] compArray) {
return myColor.getComponents(cspace, compArray);
}
ColorSpace getColorSpace()
يمكن لمطوري Java استخدام هذه الطريقة لإرجاع مساحة اللون للون المختار. هناك طريقة أخرى للحصول على مساحة لون لإدخال معين وهي تطبيق Arrays.to.String. وهذه استراتيجية أكثر تعقيدًا، كما هو موضح في المثال أدناه: أمثلة :public class Main {
public static void main(String[] args) {
Color myColor = Color.RED;
System.out.println(Arrays.toString(myColor.getComponents(ColorSpace.getInstance(ColorSpace.CS_CIEXYZ),null)));
getHSBColor(float h، float s، float b)
يطبق مطورو Java هذه الطريقة لإنشاء كائن لون جديد بناءً على قيم نموذج HSB. مثال :private Color colorAt(int y)
{
return Color.getHSBColor(1 - (float) y / (height - 1), 1, 1);
}
}
getGreen() returns the green component in the range 0-255 in the default sRGB space.
احصل على اللون الأخضر ()
تقوم طريقة Java هذه بإرجاع قيمة المكون الأخضر للون الذي قمت بإنشائه. تتناسب كافة القيم مع النطاق الذي يتوافق مع اللون الأخضر في نظام ألوان RGB. مثال :Color clickBoxColor = new Color(color.getRed(), color.getGreen(), color.getBlue(), 20);
احصل على ريد ()
وبالمثلgetGreen()
، getRed
تقوم بإرجاع قيمة المكون الأحمر للون المحدد. لقد رأيت بالفعل كيف تم تطبيق الطريقة في المثال أعلاه.
الحصول على الأزرق ()
تقوم هذه الطريقة بإرجاع قيمة اللون الأزرق ضمن نطاق قيم نظام ألوان RGB. وبالمثل، للحصول على مثال الاستخدامgetBlue()
، راجع وصف getGreen()
.
الحصول على ألفا ()
يتم استخدام طريقة getAlpha() في Java عندما يريد المطور العثور على قيمة ألفا للون معين. على غرار RBG، تقع ألفا لجميع الألوان ضمن النطاق 0-255. مثال : إليك كيفيةgetAlpha()
استخدامه كجزء من الحلقة.
int alpha = color.getAlpha();
if (alpha != 255)
{
setStrokeAlpha(alpha);
strokeAlphaSet = true;
الحصول على الشفافية ()
تقوم هذه الطريقة بإرجاع قيمة الشفافية التي حددتها أنت أو مطور آخر للون عند إنشائه. مثال :public int getTransparency() {
return myColor.getTransparency();
قيمة منطقية (كائن obj)
هذه الطريقة مفيدة للغاية إذا كنت تقارن لونين ببعضهما البعض. فهو يتيح لمطوري Java معرفة ما إذا كان كائنان ملونان لهما قيم متساوية. مثال :import java.awt.Color;
public class Main {
public static void main(String[] a) {
Color myBlack = new Color(0, 0, 0); // Color black
Color myWhite = new Color(255, 255, 255); // Color white
System.out.println(myBlack.equals(myWhite));
}
}
يساوي (كائن كائن)
وبالمثلboolean equals(Object obj)
، فإن هذه الطريقة هي طريقة مقارنة. نستخدمها لتحديد ما إذا كانت الكائنات الملونة متساوية مع بعضها البعض. مثال :
Object a = new Object(); Object b = new Object(); return(a.equals(b));
دليل الألوان الرئيسية المستخدمة في جافا
الآن بعد أن فهمت الأساليب المستخدمة لمعالجة الألوان في Java، دعنا نلقي نظرة على أنواع الحقول التي ستعمل معها. هذه هي الألوان الثابتة الفعلية التي يمكن لمطوري Java تحديدها. يمكنك إما تعريف اللون عن طريق إدخال اسمه (تأكد من إدخاله تمامًا بالطريقة المكتوبة في الوثائق الرسمية) أو تحديد قيمة RGB الخاصة به. دعونا نلقي نظرة على استخدام مطوري اللوحة:اسم الحقل | وصف |
لون ثابت أسود (أسود) | يحدد اللون الأسود |
لون ثابت أبيض (أبيض) | يحدد اللون الأبيض |
لون ثابت أزرق (أزرق) | يستخدم لتعريف اللون الأزرق |
لون ثابت رمادي (رمادي) | يحدد اللون الرمادي |
لون ثابت رمادي غامق (DARK_GRAY) | يحدد درجة أغمق من اللون الرمادي |
لون ثابت رمادي فاتح (LIGHT_GRAY) | يحدد ظلًا أفتح من اللون الرمادي |
اللون الأخضر الثابت (الأخضر) | يستخدم لتحديد اللون الأخضر |
اللون الأرجواني الثابت (MAGENTA) | يحدد الظل الأرجواني |
لون ثابت وردي (PINK) | يحدد اللون الوردي في جافا |
اللون البرتقالي الثابت (البرتقالي) | يخلق اللون البرتقالي في جافا |
لون ثابت أصفر (أصفر) | يستخدم لتحديد اللون الأصفر |
لون ثابت أحمر (أحمر) | يحدد اللون الأحمر في جافا |
مشاكل الممارسة لاستخدام AWT.Color في جافا
هل تشعر أن لديك أساسًا متينًا لـ AWT Color في Java؟ دعونا نختبر هذه المهارات عن طريق حل بعض المشاكل العملية - هنا، سيتعين عليك تطبيق المنشئات والأساليب الشائعة، بالإضافة إلى أدوات Java الأخرى غير المتعلقة بالألوان. مشكلة التدريب رقم 1 قم بإنشاء مكون مخصص يتيح لمستخدم البرنامج تعديل مستويات RGB بلون (مشابه لـRGBColorChooser
). تأكد من تضمين getColor() في مكوناتك. اجعل المكون فئة فرعية للوحة، وليس برنامجًا صغيرًا. الإجابة : هذه مشكلة معقدة إلى حد ما - دعنا نقسمها إلى خطوات يمكن التحكم فيها:
- تحويل
RGBChooser
إلى مكون. - أضف روتينًا جديدًا إلى المكون -
getColor()
. - أضف
setColor()
لضبط اللون.
import java.awt.*;
import java.awt.event.*;
public class RGBChooserComponent extends Panel implements AdjustmentListener {
private Scrollbar redScroll, greenScroll, blueScroll; // Scroll bars.
private Label redLabel, greenLabel, blueLabel; // For displaying RGB values.
private Canvas colorCanvas; // Color patch for displaying the color.
public RGBChooserComponent() { // Constructor.
/*Now let’s add scrollbars with values from 0 to 255. */
redScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265);
greenScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265);
blueScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265);
/* Create Labels showing current RGB and HSB values. */
redLabel = new Label(" R = 0");
greenLabel = new Label(" G = 0");
blueLabel = new Label(" B = 0");
/* We are setting backgrounds for Scrollbars and Labels, so they get the default
gray background of the applet. */
redScroll.setBackground(Color.lightGray);
greenScroll.setBackground(Color.lightGray);
blueScroll.setBackground(Color.lightGray);
redLabel.setBackground(Color.white);
greenLabel.setBackground(Color.white);
blueLabel.setBackground(Color.white);
/* Establish a panel that would listen for changes to the Scrollbars' values */
redScroll.addAdjustmentListener(this);
greenScroll.addAdjustmentListener(this);
blueScroll.addAdjustmentListener(this);
/* Add a canva, the background color of which will always match the currently selected color. */
colorCanvas = new Canvas();
colorCanvas.setBackground(Color.black);
/* Create the applet layout, which consists of a row of
three equal-sized regions holding the Scrollbars,
the Labels, and the color patch. The background color
of the applet is gray, which will show around the edges
and between components. */
setLayout(new GridLayout(1,3,3,3));
setBackground(Color.gray);
Panel scrolls = new Panel();
Panel labels = new Panel();
add(scrolls);
add(labels);
add(colorCanvas);
/* Add the Scrollbars and the Labels to their respective panels. */
scrolls.setLayout(new GridLayout(3,1,2,2));
scrolls.add(redScroll);
scrolls.add(greenScroll);
scrolls.add(blueScroll);
labels.setLayout(new GridLayout(3,1,2,2));
labels.add(redLabel);
labels.add(greenLabel);
labels.add(blueLabel);
} // end init();
public Color getColor() {
// Get the color currently displayed by the component.
int r = redScroll.getValue();
int g = greenScroll.getValue();
int b = blueScroll.getValue();
return new Color(r, g, b);
}
public void setColor(Color c) {
// Set the component to display the given color.
// (Ignore this if c is null.)
if (c != null) {
int r = c.getRed(); // Get the color levels from the color.
int g = c.getGreen();
int b = c.getBlue();
redLabel.setText(" R = " + r); // Set the labels.
greenLabel.setText(" G = " + g);
blueLabel.setText(" B = " + b);
redScroll.setValue(r); // Set the scrollbars.
greenScroll.setValue(g);
blueScroll.setValue(b);
colorCanvas.setBackground(new Color(r,g,b)); // Set the canvas.
colorCanvas.repaint();
}
}
public Dimension getMinimumSize() {
// Specify the minimum reasonable size of this component.
return new Dimension(150,40);
}
public Dimension getPreferredSize() {
// Specify the preferred size of this component.
return new Dimension(280,80);
}
public void adjustmentValueChanged(AdjustmentEvent evt) {
// This is called when the user has changed the values on
// one of the scrollbars. All the scrollbars are checked,
// the labels are set to display the correct values,
// and the color patch is reset to correspond to the new color.
int r = redScroll.getValue();
int g = greenScroll.getValue();
int b = blueScroll.getValue();
redLabel.setText(" R = " + r);
greenLabel.setText(" G = " + g);
blueLabel.setText(" B = " + b);
colorCanvas.setBackground(new Color(r,g,b));
colorCanvas.repaint(); // Redraw the canvas in its new color.
} // end adjustmentValueChanged
public Insets getInsets() {
// The system calls this method to find out how much space to
// leave between the edges of the applet and the components that
// it contains. I want a 2-pixel border at each edge.
return new Insets(2,2,2,2);
}
} // end class RGBColorChooser
GO TO FULL VERSION