(初学者)
嗨,很抱歉问这个问题,但是我总是有错误从哪里冒出来,我希望这个程序很简单。
package pixelpainter;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
public class PixelPainter extends JPanel {
int width = 20;
int height = 20;
int pixSize = 10;
Color bGColor = Color.WHITE;
Dimension pixDim = new Dimension(pixSize,pixSize);
private JPanel panelClicked = null;
JFrame frame= new JFrame();
/**
* @param args the command line arguments
*/
public PixelPainter()
{
initGUI();
}
public void initGUI() {
frame.setLayout(new GridLayout(height, width, 0, 0));
frame.setSize((height * pixSize), (width * pixSize));
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
int[][] pixGrid = new int [width][height];
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
JPanel pixel[][] = new JPanel[width][height];
frame.add(pixel[row][col]);
pixel[row][col].setBackground(bGColor);
pixel[row][col].setPreferredSize(pixDim);
pixel[row][col].setBorder(BorderFactory.createLineBorder(Color.BLACK));
pixel[row][col].addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent click)
{
JPanel selectedPixel = (JPanel) getComponentAt(click.getPoint());
if (selectedPixel == null || selectedPixel == PixelPainter.this)
{
return;
}
if (selectedPixel != null)
{
selectedPixel.setBackground(Color.BLACK);
}
}
@Override
public void mousePressed(MouseEvent press)
{
}
});
}
}
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new PixelPainter().setVisible(true);
}
});
}
}
理想情况下,我会在填充颜色时使用2D数组JFrame,但显然它们必须是final或实际上是final。
我重新安排了你的代码,把类似的东西组合在一起。
下面是我创建的GUI。
我对您的代码做了以下更改。
由于model/view/controller模式,我将鼠标适配器代码拉到它自己的类中。分离关注点可以使GUI的每个部分更容易地正常工作。
代码是这样的。
package com.ggl.testing;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PixelPainter implements Runnable {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new PixelPainter());
}
@Override
public void run() {
initGUI();
}
public void initGUI() {
frame = new JFrame("Pixel Art");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createPixels());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JPanel createPixels() {
int width = 30;
int height = 20;
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(height, width, 0, 0));
for (int row = 0; row < height; row++) {
for (int column = 0; column < width; column++) {
PixelPanel pixelPanel = new PixelPanel();
pixelPanel.addMouseListener(new ColorListener(pixelPanel));
panel.add(pixelPanel);
}
}
return panel;
}
public class PixelPanel extends JPanel {
private static final long serialVersionUID = 8465814529701152253L;
private static final int PIXEL_SIZE = 20;
private Color backgroundColor;
public PixelPanel() {
this.backgroundColor = Color.WHITE;
this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
this.setPreferredSize(new Dimension(PIXEL_SIZE, PIXEL_SIZE));
}
public Color getBackgroundColor() {
return backgroundColor;
}
public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(getBackgroundColor());
g.fillRect(0, 0, getWidth(), getHeight());
}
}
public class ColorListener extends MouseAdapter {
private PixelPanel panel;
public ColorListener(PixelPanel panel) {
this.panel = panel;
}
@Override
public void mousePressed(MouseEvent event) {
if (event.getButton() == MouseEvent.BUTTON1) {
panel.setBackgroundColor(Color.BLUE);
panel.repaint();
} else if (event.getButton() == MouseEvent.BUTTON3) {
panel.setBackgroundColor(Color.WHITE);
panel.repaint();
}
}
}
}
我正在研究为我们的客户报告工具创建PDF报告的不同方法。我找到了这个链接,他们可以在PDF文档上执行操作和表单。有可能以编程方式生成这些PDF吗?比如有没有API可以创建这样的PDF? 我使用过apache POI和iText,但它没有这些功能。有没有人遇到过任何开源或商业工具用于此目的? 我的主要目标用户将是iPad用户。因此在objective c中使用此API也会有所帮助。
所属类别 交互(Interactions) | 实用工具(Utilities) 用法 描述:基本交互层。 依赖: 部件库(Widget Factory) 注释:与 jQuery.Widget 相似,鼠标交互的目的不是直接使用。这是一个纯粹给其他小部件继承用的基础层。该页面有添加到 jQuery.Widget 的文档,但是它包含了不能被覆盖的内部方法。公共的 API 是 _mouseStart()、
我试图使用GridBagLayout将两个JPanel放置到一个JFrame上。第一个JPanel使用gridLayout创建35列和27行JButtons,宽度应该是JFrame的3/4。此面板需要填充其可用的垂直空间。第二个JPanel也使用gridLayout,应该填充主JFrame的最后1/4。 不幸的是,我的第一个JPanel(sPan)甚至不适合屏幕,并迫使整个第二个JPanel(cP
下面的代码生成九个单独的JPanels,其中有9个按钮。九个JPanel使用GridLayout排列到一个基本JPanel上。然后使用边框布局将这个基本JPanel放置到ContentPane上。我对JButtons和每个JPanel使用边框来明确定义它们的分离。每个JPanel中的JButtons看起来都很好,但是JPanels之间有一个间隙,这导致了双行的出现,这让我非常恼火。我尝试将每个JP
其思想是用户选择一个输入,并且对应于该输入的标记(将从对应输入的数据集中提取的lat/long)显示在传单地图中(具有放大/缩小功能)。任何帮助/建议将不胜感激! (示例数据文件上载于此):
问题内容: 我有一个带有悬停效果的菜单栏,现在我想在一个菜单项上放置一个带有圆圈和“手绘”文本的透明图像。如果我使用绝对定位将叠加图像放置在菜单项上方,则用户将无法单击该按钮,并且悬停效果将不起作用。 有什么办法可以禁用鼠标与此覆盖图像的交互,以使菜单即使在图像下方也能像以前一样继续工作? 编辑: 因为菜单是使用joomla生成的,所以我无法仅调整菜单项之一。即使可以,我也不认为使用javascr