- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经为此寻找解决方案很长一段时间了,但是我还没有找到,那么为什么不自己问这个问题呢?这是一个更大的程序的一部分,该程序是围绕与图像转换有关的所有内容构建的。
我首先构建了它本身,以便稍后将其添加到更大的程序中。我收到的错误是当我想从显示的图像中选择特定像素时。由于 JPanel 上显示的 Java 图标无法应用 .getRGB 和 .setRGB 方法,因此我将图像转换为 BufferedImage。但是 BufferedImage 不能直接显示在 JPanel 上。这就是图标存在的原因。
现在唯一的问题是,每次我单击图像时,都会收到错误。
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
at ImageWindow.Window1$3.mouseClicked(Window1.java:158)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
这是我为此使用的代码:
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import net.miginfocom.swing.MigLayout;
import javax.swing.JScrollPane;
import javax.imageio.ImageIO;
import javax.swing.Box;
import javax.swing.JTextField;
import javax.swing.JFileChooser;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.awt.Dimension;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;
import java.awt.Canvas;
public class Window1 {
File File1 = new File("");
String pathName = "";
int accepted;
int x;
int y;
int colour;
ImageIcon icon;
int red;
int green;
int blue;
int width;
int height;
BufferedImage image;
int c1num;
//BufferedImage image1 = new BufferedImage(null, null, false, null);
private JFrame frame;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
private JTextField textField_3;
private JTextField textField_4;
private JTextField textField_5;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Window1 window = new Window1();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the parent application.
*/
public Window1() {
initialize(); //More other windows can be added to this later
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 450, 300);
frame.getContentPane().setLayout(new MigLayout("debug", "[grow][grow]", "[][266.00,grow]"));
JToolBar toolBar = new JToolBar();
frame.getContentPane().add(toolBar, "flowx,cell 0 0 2 1,aligny top");
JLabel lblImage = new JLabel("");
lblImage.setHorizontalAlignment(SwingConstants.CENTER);
lblImage.setVerticalAlignment(SwingConstants.TOP);
JButton btnOpenImage = new JButton("Open Image");
btnOpenImage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ec) {
JFileChooser openimage = new JFileChooser("Open image");
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
openimage.setFileFilter(filter);
accepted = openimage.showOpenDialog(null);
File1 = openimage.getSelectedFile();
try {
if (accepted == JFileChooser.APPROVE_OPTION) {
pathName = openimage.getSelectedFile().getPath();
icon = new ImageIcon(pathName);
lblImage.setIcon(icon);
} else {
JOptionPane.showMessageDialog(null, "Feel Free to Look Later");
}
} catch (Exception ec1) {
// TODO Auto-generated catch block
ec1.printStackTrace();
}
}
}
);
BufferedImage buffered = null;
try {
buffered = ImageIO.read(getClass().getResourceAsStream("images/test1.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Color c = new Color(buffered.getRGB(x,y));
lblImage.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
x=e.getX();
y=e.getY();
Image image = icon.getImage();
BufferedImage buffered = (BufferedImage) image;
System.out.println(x+","+y);//these co-ords are relative to the component
colour = buffered.getRGB(x,y);
red = c.getRed();
green = c.getGreen();
blue = c.getBlue();
//Integer.toBinaryString(i)
System.out.println(red + " " + green + " " + blue);
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
});
toolBar.add(btnOpenImage);
JButton btnExit = new JButton("Exit");
btnExit.addActionListener(new ActionListener() { //here, the functionality for the "exit" button is added.
public void actionPerformed(ActionEvent ev) {
System.exit(0);
}
});
JButton btnSaveImage = new JButton("Save Image");
btnSaveImage.addActionListener(new ActionListener() { //here, the functionality for the "exit" button is added.
public void actionPerformed(ActionEvent ev) {
File output = new File("image.jpg");
try {
ImageIO.write(buffered, "jpg", output);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
toolBar.add(btnSaveImage);
toolBar.add(btnExit);
JScrollPane scrollPane = new JScrollPane();
frame.getContentPane().add(scrollPane, "cell 0 1,grow");
scrollPane.setViewportView(lblImage);
JPanel panel_1 = new JPanel();
frame.getContentPane().add(panel_1, "cell 1 1,width max(60, 10%),grow");
Box verticalBox = Box.createVerticalBox();
panel_1.add(verticalBox);
Box horizontalBox = Box.createHorizontalBox();
verticalBox.add(horizontalBox);
Box verticalBox_2 = Box.createVerticalBox();
horizontalBox.add(verticalBox_2);
JLabel label = new JLabel("R1");
verticalBox_2.add(label);
Component verticalStrut_6 = Box.createVerticalStrut(8);
verticalBox_2.add(verticalStrut_6);
JLabel label_1 = new JLabel("R2");
verticalBox_2.add(label_1);
Component verticalStrut_7 = Box.createVerticalStrut(8);
verticalBox_2.add(verticalStrut_7);
JLabel label_2 = new JLabel("R3");
verticalBox_2.add(label_2);
Component verticalStrut_8 = Box.createVerticalStrut(20);
verticalBox_2.add(verticalStrut_8);
JLabel label_3 = new JLabel("R1.1");
verticalBox_2.add(label_3);
Component verticalStrut_9 = Box.createVerticalStrut(8);
verticalBox_2.add(verticalStrut_9);
JLabel label_4 = new JLabel("R2.1");
verticalBox_2.add(label_4);
Component verticalStrut_10 = Box.createVerticalStrut(8);
verticalBox_2.add(verticalStrut_10);
JLabel label_5 = new JLabel("R3.1");
verticalBox_2.add(label_5);
Box horizontalBox_1 = Box.createHorizontalBox();
horizontalBox.add(horizontalBox_1);
Box verticalBox_3 = Box.createVerticalBox();
horizontalBox_1.add(verticalBox_3);
String red1 = (red + "");
textField = new JTextField();
textField.setText("red");
textField.setText(red1);
textField.setColumns(10);
verticalBox_3.add(textField);
String green1 = (green + "");
textField_1 = new JTextField();
textField_1.setText("green");
textField_1.setText(green1);
textField_1.setColumns(10);
verticalBox_3.add(textField_1);
String blue1 = (blue + "");
textField_2 = new JTextField();
textField_2.setText("blue");
textField_2.setText(blue1);
textField_2.setColumns(10);
verticalBox_3.add(textField_2);
Component verticalStrut_11 = Box.createVerticalStrut(20);
verticalBox_3.add(verticalStrut_11);
textField_3 = new JTextField();
textField_3.setText("Text1.1");
textField_3.setColumns(10);
verticalBox_3.add(textField_3);
textField_4 = new JTextField();
textField_4.setText("Text2.1");
textField_4.setColumns(10);
verticalBox_3.add(textField_4);
textField_5 = new JTextField();
textField_5.setText("Text3.1");
textField_5.setColumns(10);
verticalBox_3.add(textField_5);
Component verticalStrut = Box.createVerticalStrut(20);
verticalBox.add(verticalStrut);
width = buffered.getWidth();
height = buffered.getHeight();
Color col1 = new Color(red, green, blue);
c1num = col1.getRGB();
JButton btnNewButton = new JButton("Save"); //The button on the panel to set the colourk into the image
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buffered.setRGB(width,height, c1num);
}
});
verticalBox.add(btnNewButton);
}
}
最佳答案
我认为这个错误是不言自明的,存储在ImageIcon
中的Image
实例不是BufferedImage
的实例,相反,你需要将图标绘制到 BufferedImage
例如:
Icon icon = ...;
BufferedImage img = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
icon.paintIcon(null, g2d, 0, 0);
g2d.dispose();
关于java - 单击监听器在 BufferedImage 和 Icon 上返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43777585/
我正在开发一个 Android 项目,其中有一个抽屉导航,其中显示了 GroupSection 对象的列表。所有 GroupSection 对象都包含一个部分图标。抽屉图标由 TypedArray 和
$('a[class*=icon-]').append(""); 使用我现在拥有的代码,我可以转动: 进入 但我想将选定的类“icon-edit”附加到跨度类中。因为我想要这样的东西: var
我正在建立一个网站,我希望在视觉上有一排字体很棒的图标看起来具有相同的高度。这也意味着我希望他们都坐在同一基线上。 由于图标的性质是具有不同纵横比的不同形状,当您将具有相同字体大小或 fa-2x(等)
我有两个图标,其中一个图标为 .gif,另一个图标为 .png。所以我想组合这些图标,将动画图标放在另一个图标之上。 此代码适用于静态图标,但在放置动画图标时,它不会打印动画。 public clas
当我在控制台中运行 gatsby develop 时,会出现此错误: ERROR #11331 PLUGIN Invalid plugin options for "gatsby-plugin-ma
在适用于iPhone的iOS 7上,有一个新的应用程序图标大小:120x120。我使用此尺寸来创建iOS 7专用图标。在iOS 6上,它将自动采用“旧” 114x114图标,在iOS 7上,它将采用新
我的简单问题是:是否可以将图标组件内的文本居中,我尝试像 child 一样传递文本,但它不起作用?还有其他解决方案吗?我知道可能的解决方案是使用 position: 'absolute' 但还有其他方
我有这个代码: if(seatE1.getIcon() == particular icon) { // do something } 我不知道在特定图标中写什么。我应该写我想要的图标的路径还
在调用 System.Drawing.Icon.ToBitmap() 创建图像后,是否可以安全地处理原始 Icon? 最佳答案 该方法将 Icon 转换为新的 Bitmap 对象,因此不会有从 Bit
这个图钉图标的名称是什么? 最佳答案 现在 Material Icon 中提供了准确的图标。 图标名称:push_pin 图标网址:https://material.io/resources/icon
数据如下: df % ggplot(aes(label = parts, values = values)) + geom_pictogram(n_rows = 10, aes(color =
我正在为 VSCode 编写扩展。在 WebviewPanel 中,我需要显示来自文件图标主题的文件扩展名图标。是否有从文件图标主题中获取图标的功能? 最佳答案 我也在研究这个。我还没有答案,但到目前
我正在组装一个通用应用程序,并且我的项目中有图标,但是我不断从编译器收到关于Icon.png的警告。 我按照http://developer.apple.com/library/ios/#qa/qa2
我正在组装一个通用应用程序,并且我的项目中有图标,但是我不断从编译器收到有关Icon.png的警告。 我按照http://developer.apple.com/library/ios/#qa/qa2
我下载了“Office 2010 Add-In: Icons Gallery ”,这是一个 docx 文件,其中有两个包含图标的后台选项卡。 如何提取图标或在我的应用程序中使用它们? 最佳答案 我在
我正在开发一个 MacOS 应用程序,该应用程序应显示应用程序图标。对于某些应用程序,它可以工作,对于某些应用程序,它不能。 Notes.app 是我没有获得应用程序图标图像的应用程序。 let ic
我只是在Android Studio中创建了一个模板项目,我没有更改一行代码(DrawerLayout模板项目)。 但是,我发现用于显示导航 fragment 的单击图标始终是向左箭头,即使在代码中它
我正在尝试找出如何使用 xpath 通配符来获取网站图标: $doc = new DOMDocument(); $doc->strictErrorChecking = FALSE; $doc->loa
Mobile Safari对于比传统 16x16 分辨率更高的图标,需要使用以下咒语: 但是,Firefox 需要使用 HTML5 syntax ,例如: 现在,我的期望是可以将它们组合成一行
我目前为动态创建的 QPushButton 使用以下样式表属性 string mystyle = "QPushButton { border: 1px solid #8f8f91; border-
我是一名优秀的程序员,十分优秀!