PDA

View Full Version : سوال: استفاده از شیب رنگ برای طراحی کنترل ها



سایانا
جمعه 30 خرداد 1393, 12:16 عصر
سلام دوستان.
من یک برنامه گرافیکی دارم که در اون panel ای رو ایجاد کردم که میخوام براش شیب رنگ ایجاد کنم. اما نمیدونم چطور باید از تابع paintComponent اون استفاده کنم.در جست وجو های اینترنتیمم به چیزی که میخواستم نرسیدم.لطفا اگه کسی در اینمورد میدونه کمکم کنه.

Tiyana
جمعه 30 خرداد 1393, 14:13 عصر
شما میتونی از JColorChooser استفاده کنی:

http://docs.oracle.com/javase/8/docs/api/javax/swing/JColorChooser.html
http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html
http://www.java2s.com/Code/Java/Swing-JFC/ColorChooserSample1.htm

vahid-p
شنبه 31 خرداد 1393, 13:45 عصر
JChooseColor درست و صرف نظر از اون برای من هم سوال بود که دقیقا چه الگوریتمی میشه پیاده کرد که تمام رنگ ها رو در یک مربع بیاریم.
چیزی که خودم به ذهنم میاد اینه که چون سه رنگ R , G , B داریم میتونیم در سه بعد هر بعد رنگ ها از 0 تا 255 رو تغییر بدیم ( متناسب با سایز مربعمون گام های افزایشیمون رو تعیین میکنیم ) و پیکسل ها رو تشکیل بدیم. البته تو فتوشاپ دقت کنید برای بعد سوم یه راهش اینه که بعد سوم رو به صورت یک نوار قرار میده و با تنظیم یک بعد، یک مربع از برش اون مکعب سه بعدی که مربع هست رو نشون میده. اینجوری به تمام رنگها دسترسی داریم.

احتمالا راه حل های بهتری هم هست!

vahid-p
شنبه 31 خرداد 1393, 17:51 عصر
این کد رو نوشتم، یه Color Chooser است طبق چیزی که توضیح دادم : ( Slider رنگ قرمز رو تنظیم میکنه، در دو بعد دیگه سبز و آبی )
با کلیک بر روی نقاط مختلف، مقدار رنگ ها مشخص میشه.

خروجی :
120380

کد جاوا :

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class VColor extends JFrame {

BufferedImage bufferedImage;
JSlider jSlider;

public VColor() {
super();
setLayout(new BorderLayout());
setSize(260, 320);
bufferedImage = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);

JLabel label = new JLabel() {

@Override
public void paint(Graphics g) {
super.paint(g); //To change body of generated methods, choose Tools | Templates.
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(bufferedImage, null, 0, 0);
}

};
label.setSize(256, 256);
add(label, BorderLayout.CENTER);

jSlider = new JSlider(JSlider.HORIZONTAL);
add(jSlider, BorderLayout.SOUTH);
jSlider.addChangeListener(new ChangeListener() {

@Override
public void stateChanged(ChangeEvent e) {
for (int i = 0; i < 255; i++) {
for (int j = 0; j < 255; j++) {
bufferedImage.setRGB(i, j, (int) ((int) (jSlider.getValue() * 2.55) << 16) | (i << 8) | j);
}
}
VColor.this.repaint();
}
});
label.addMouseListener(new MouseAdapter() {

@Override
public void mouseClicked(MouseEvent e) {
int rgb = bufferedImage.getRGB(e.getX(), e.getY());
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;

JOptionPane.showMessageDialog(VColor.this, "Color :\n" + "Red : " + r + "\nGreen : " + g + "\nBlue : " + b);
}

});
jSlider.setValue(0);
}

}

سایانا
شنبه 31 خرداد 1393, 19:55 عصر
جناب vahid-p واقعا زیبا بود ممنون.

dasssnj
دوشنبه 02 تیر 1393, 13:20 عصر
اینم color chooser من تقدیم به همه ی برنامه نویس های جاوا و کسانی که توی انجمن به من خیلی کمک کردن.
دارای سه اسلایدر به ترتیب قرمز و سبز و آبی . و قابلیت نمایش کد هگزادسیمال.

120418

فایل جاوا ضمیمه شد.
120419