我是新來的java,並決定做一個程序:當您離開單擊時在窗口中設置一個點。然後再點擊一次即可。等等......然後加入所有的點了線條和陰影線的側取決於有多少點上線的一側(像這樣)在鼠標下的像素的透明度 - Java JFrame
問題從這裏開始:。
現在我需要一個更多的功能。當我右鍵單擊時,我想要顯示鼠標座標像素的透明度。所以當點擊中間時,它會告訴我,它比我右鍵點亮燈光區域時更透明(或更暗)。
我做了一些Google搜索,但找不到答案。最接近的我是創建一個與機器人截圖,並使用它作爲緩衝圖像,然後分析像素的方式。但是,我似乎沒有工作,因爲無論我右鍵單擊我得到255,255,255,255 ARGB。有時奇怪的東西像AGBA 255,234,236,245。
希望你可以按照我想要做的。
這是我的代碼。
我其中星級節目主類創建窗口,並執行鼠標接口:
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.*;
import java.awt.image.BufferedImage;
public class mouse {
static DataTransfer data = new DataTransfer();
private static int x,y ;
private static draw object = new draw();
public static int numPoints = 0;
public static final int maxPoints = 4;
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame();
Robot robot = new Robot();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Drawing");
frame.setSize(500, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.add(object);
data.getRobot(robot,frame.getSize());
object.addMouseListener(new AL());
}
public static class AL extends MouseAdapter {
public void mouseClicked(MouseEvent e){
if (e.getButton() == MouseEvent.BUTTON1)
{
if (numPoints < maxPoints){
x = e.getX();
y = e.getY();
object.drawing(x,y,numPoints);
System.out.println("NUMBRER"+numPoints);
numPoints++;
}
}
if (e.getButton() == MouseEvent.BUTTON3)
{
x = e.getX();
y = e.getY();
int pixel = data.getScreen().getRGB(x, y);
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
System.out.println("argb: " + alpha + ", " + red + ", " + green + ", " + blue);
}
}
}
// Here I tried to access the Robot in the mouse class, but I couldn't so I had to create this transition class in hope of it working
public static class DataTransfer{
BufferedImage screen ;
public void getRobot(Robot robot,Dimension size)
{
screen = robot.createScreenCapture(new Rectangle(size));
}
public BufferedImage getScreen(){
return screen;
}
}
}
而且我Graphics類與陰影和線條等交易...(大部分是重演了陰影的每一種情況下,這樣你就不需要閱讀整個事情)
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class draw extends JPanel {
int[] polX = new int[5];
int[] polY = new int[5];
int[] aX = new int[mouse.maxPoints];
int[] aY = new int[mouse.maxPoints];
float m, c;
int corners;
//float triAng = 30;
float triAng = 255/(((mouse.maxPoints)*(mouse.maxPoints + 1))/2);
public void drawing(int xx, int yy, int Number) {
aX[Number] = xx;
aY[Number] = yy;
repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(new Color(0,255,0,255));
g.setColor(new Color(255,0,0,(int)triAng));
for(int i=0; i<mouse.numPoints;i++){
for(int j = i+1; j < mouse.numPoints; j++)
{
// Shading the area
//1) finding the equation of the line
if(aX[i] != aX[j]){
if(aY[i] != aY[j]){
//Work out the Gradient
m = (float)(aY[j] - aY[i]) /(aX[j] - aX[i]);
c = ((float)aY[i]-(((float)aX[i])*m));
for(int k=0;k<mouse.numPoints;k++){
if(m<0){
//Gradient is negative
if(k!= i && k!=j){
//Below
if(aX[k]*m+c < aY[k]){
//Clockwise from origin
// Left Right
// N - no additional corner
// Y- Additional Corner
// N N
if((c >= 400) && (500*m+c) >= 0) {
polX[1] = (int)((400-c)/m);
polY[1] = 400;
polX[2] = 500;
polY[2] = (int)(500*m+c);
corners = 3;
}
// N Y
else if(c >= 400 && (500*m+c) < 0) {
polX[1] = (int)((400-c)/m);
polY[1] = 400;
polX[2] = (int)((0-c)/m);
polY[2] = 0;
polX[3] = 500;
polY[3] = 0;
corners = 4;
}
// Y N
else if(c < 400 && (500*m+c) >= 0) {
polX[1] = 0;
polY[1] = 400;
polX[2] = 0;
polY[2] = (int)c;
polX[3] = 500;
polY[3] = (int)(500*m+c);
corners = 4;
}
// YY
else if(c < 400 && (500*m+c) < 0){
polX[1] = 0;
polY[1] = 400;
polX[2] = 0;
polY[2] = (int)c;
polX[3] = (int)((0-c)/m);
polY[3] = 0;
polX[4] = 500;
polY[4] = 0;
corners = 5;
}
//Origin corners
polX[0] = 500;
polY[0] = 400;
g.fillPolygon(polX, polY, corners);
}
//I am here
///////////////Above
if(aX[k]*m+c > aY[k]){
//Clockwise from origin
// Left Right
// N - no additional corner
// Y- Additional Corner
// N N
if((c <= 400) && (500*m+c) <= 0) {
polX[1] = (int)((0-c)/m);
polY[1] = 0;
polX[2] = 0;
polY[2] = (int)(c);
corners = 3;
}
// N Y
else if(c <= 400 && (500*m+c) > 0) {
polX[1] = 500;
polY[1] = 0;
polX[2] = 500;
polY[2] = (int)(500*m+c);
polX[3] = 0;
polY[3] = (int)c;
corners = 4;
}
// Y N
else if(c > 400 && (500*m+c) <= 0) {
polX[1] = (int)((0-c)/m);
polY[1] = 0;
polX[2] = (int)((400-c)/m);
polY[2] = 400;
polX[3] = 0;
polY[3] = 400;
corners = 4;
}
// Y Y
else if(c > 400 && (500*m+c) > 0){
polX[1] = 500;
polY[1] = 0;
polX[2] = 500;
polY[2] = (int)(500*m+c);
polX[3] = (int)((400-c)/m);
polY[3] = 400;
polX[4] = 0;
polY[4] = 400;
corners = 5;
}
//Origin corners
polX[0] = 0;
polY[0] = 0;
g.fillPolygon(polX, polY, corners);
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
if(m>0){
//Gradient is Positive
if(k!= i && k!=j){
//Below
if(aX[k]*m+c < aY[k]){
//Clockwise from origin
// Left Right
// N - no additional corner
// Y- Additional Corner
// N N
if((c >= 0) && (500*m+c) >= 400) {
polX[1] = 0;
polY[1] = (int)c;
polX[2] = (int)((400-c)/m);
polY[2] = 400;
corners = 3;
}
// N Y
else if(c >= 0 && (500*m+c) < 400) {
polX[1] = 0;
polY[1] = (int)c;
polX[2] = 500;
polY[2] = (int)(500*m+c);
polX[3] = 500;
polY[3] = 400;
corners = 4;
}
// Y N
else if(c < 0 && (500*m+c) >= 400) {
polX[1] = 0;
polY[1] = 0;
polX[2] = (int)((0-c)/m);
polY[2] = 0;
polX[3] = (int)((400-c)/m);
polY[3] = 400;
corners = 4;
}
// Y Y
else if(c < 0 && (500*m+c) < 400){
polX[1] = 0;
polY[1] = 0;
polX[2] = (int)((0-c)/m);
polY[2] = 0;
polX[3] = 500;
polY[3] = (int)(500*m+c);
polX[4] = 500;
polY[4] = 400;
corners = 5;
}
//Origin corners
polX[0] = 0;
polY[0] = 400;
g.fillPolygon(polX, polY, corners);
}
///////////////Above
if(aX[k]*m+c > aY[k]){
//Clockwise from origin
// Left Right
// N - no additional corner
// Y- Additional Corner
// N N
if((c <= 0) && (500*m+c) <= 400) {
polX[1] = 500;
polY[1] = (int)(500*m+c);
polX[2] = (int)((0-c)/m);
polY[2] = 0;
corners = 3;
}
// N Y
else if(c <= 0 && (500*m+c) > 400) {
polX[1] = 500;
polY[1] = 400;
polX[2] = (int)((400-c)/m);
polY[2] = 400;
polX[3] = (int)((0-c)/m);
polY[3] = 0;
corners = 4;
}
// Y N
else if(c > 0 && (500*m+c) <= 400) {
polX[1] = 500;
polY[1] = (int)(500*m+c);
polX[2] = 0;
polY[2] = (int)c;
polX[3] = 0;
polY[3] = 0;
corners = 4;
}
// Y Y
else if(c > 0 && (500*m+c) > 40){
polX[1] = 500;
polY[1] = 400;
polX[2] = (int)((400-c)/m);
polY[2] = 400;
polX[3] = 0;
polY[3] = (int)c;
polX[4] = 0;
polY[4] = 0;
corners = 5;
}
//Origin corners
polX[0] = 500;
polY[0] = 0;
g.fillPolygon(polX, polY, corners);
}
}
}
}
}
else{
//code for horizontal line
}
}
else{
//Vertical
}
}
}
g.setColor(new Color(0,255,0,255));
for(int i=0; i<mouse.numPoints; i++){
g.fillOval(aX[i] - 10,aY[i]-10,20,20);
}
// Drawing The Line //////
for(int i=0; i<mouse.numPoints;i++){
for(int j = i+1; j < mouse.numPoints; j++){
g.setColor(new Color(0,255,0,255));
g.drawLine(aX[i], aY[i], aX[j], aY[j]);
g.setColor(new Color(255,0,0,(int)triAng));
}
}
}
}