我创建了一个网格,以及我的类 gridBalls
的双数组 .
gridBalls
有一个 int
类型,你传给它一个数字来确定在网格中绘制什么,比如0空白,1球等 .
如果我想在我的网格上点击插槽[0] [0](假装它是一个球),将鼠标向右拖动并绘制一条水平线(类型3 in),我的_2422404中代码会是什么样子?这个例子),或者如果我拖动我的鼠标底部,它画了一条垂直线(类型2)
public class connectiontest extends JApplet implements Runnable, MouseListener, MouseMotionListener
{
Thread t;
int GRIDSIZE = 6;
int gridLevel = 1;
JPanel menuPanel = new JPanel (null);
JPanel gamePanel = new JPanel (new GridLayout (GRIDSIZE, GRIDSIZE));
gridBalls[] [] panelGrid = new gridBalls [GRIDSIZE] [GRIDSIZE];
public void init ()
{
getContentPane ().setBackground (Color.black);
getContentPane ().setLayout (null);
setSize (600, 600);
gamePanel.setBounds (80, 120, 450, 450);
gamePanel.setEnabled (true);
menuPanel.setBounds (10, 10, 580, 100);
menuPanel.setBackground (Color.black);
menuPanel.setOpaque (true);
menuPanel.setBorder (BorderFactory.createLineBorder (Color.white, 1));
getContentPane ().add (gamePanel);
getContentPane ().add (menuPanel);
t = new Thread (this);
drawGrid ();
levels ();
t.start ();
}
public void run ()
{
while (t != null)
{
try
{
t.sleep (20);
}
catch (InterruptedException e)
{
break;
}
}
}
private void drawGrid ()
{
for (int row = 0 ; row < GRIDSIZE ; row++)
{
for (int col = 0 ; col < GRIDSIZE ; col++)
{
panelGrid [row] [col] = new gridBalls ();
panelGrid [row] [col].setOpaque (true);
panelGrid [row] [col].setBackground (Color.black);
panelGrid [row] [col].clr = Color.black;
panelGrid [row] [col].setBorder (BorderFactory.createLineBorder (Color.blue, 1));
gamePanel.add (panelGrid [row] [col]);
panelGrid [row] [col].addMouseListener (this);
panelGrid [row] [col].addMouseMotionListener (this);
}
}
}
public void mouseClicked (MouseEvent e)
{
}
public void mouseEntered (MouseEvent e)
{
}
public void mouseExited (MouseEvent e)
{
}
public void mousePressed (MouseEvent e)
{
}
public void mouseMoved (MouseEvent e)
{
}
public void mouseDragged (MouseEvent e)
{
for (int i = 0 ; i < GRIDSIZE ; i++)
{
for (int j = 0 ; j < GRIDSIZE ; j++)
{
if (e.getSource () == panelGrid [i] [j])
{
repaint ();
}
}
}
}
public void mouseReleased (MouseEvent e)
{
}
public void levels ()
{
if (gridLevel == 1)
{
panelGrid [0] [0].clr = Color.green;
panelGrid [0] [0].type = 1;
panelGrid [4] [0].clr = Color.green;
panelGrid [4] [0].type = 1;
panelGrid [0] [5].clr = Color.blue;
panelGrid [0] [5].type = 1;
panelGrid [5] [2].clr = Color.blue;
panelGrid [5] [2].type = 1;
panelGrid [0] [4].clr = Color.red;
panelGrid [0] [4].type = 1;
panelGrid [3] [2].clr = Color.red;
panelGrid [3] [2].type = 1;
panelGrid [5] [0].clr = Color.magenta;
panelGrid [5] [0].type = 1;
panelGrid [0] [1].clr = Color.magenta;
panelGrid [0] [1].type = 1;
panelGrid [1] [4].clr = Color.orange;
panelGrid [1] [4].type = 1;
panelGrid [4] [2].clr = Color.orange;
panelGrid [4] [2].type = 1;
panelGrid [0] [2].clr = Color.cyan;
panelGrid [0] [2].type = 1;
panelGrid [2] [2].clr = Color.cyan;
panelGrid [2] [2].type = 1;
repaint ();
}
}
}
class gridBalls extends JLabel
{
Color clr;
int type = 0;
public gridBalls ()
{
}
public void paintComponent (Graphics g)
{
super.paintComponent (g);
g.setColor (clr);
// blank
if (type == 0)
{
}
// ball
if (type == 1)
{
g.fillOval ((getWidth () / 10), (getHeight () / 10), (getWidth () - 14), (getHeight () - 14));
}
// vertical line
if (type == 2)
{
g.fillRect ((getWidth () / 3), 0, (getWidth () / 3), getHeight ());
}
// horizontal line
if (type == 3)
{
g.fillRect (0, (getHeight () / 3), (getWidth ()), (getHeight () / 3));
}
// corner piece top>right
if (type == 4)
{
g.fillRect ((getWidth () / 3), 0, (getWidth () / 3), (getHeight () / 2));
g.fillRect ((getHeight () / 3), (getHeight () / 3), (getWidth ()), (getHeight () / 3));
}
// corner piece top>left
if (type == 5)
{
g.fillRect ((getWidth () / 3), 0, (getWidth () / 3), (getHeight () / 2));
g.fillRect (0, (getHeight () / 3), (getWidth () / 3 + getWidth () / 3), (getHeight () / 3));
}
// corner piece bottom>right
if (type == 6)
{
g.fillRect ((getWidth () / 3), (getHeight () / 2), (getWidth () / 3), (getHeight () / 2));
g.fillRect ((getHeight () / 3), (getHeight () / 3), (getWidth ()), (getHeight () / 3));
}
// corner piece bottom>left
if (type == 7)
{
g.fillRect ((getWidth () / 3), (getHeight () / 2), (getWidth () / 3), (getHeight () / 2));
g.fillRect (0, (getHeight () / 3), (getWidth () / 3 + getWidth () / 3), (getHeight () / 3));
}
}
}
1 回答
层的整体构造使得实际上很难使绘画效果正常工作 .
但是,您的鼠标处理程序事件看起来像......
clickPoint
和dragPoint
是java.awt.Point
的实例 .你的下一个问题是要画这个......
您需要能够绘制内容 . 因为
paint
不是't double buffered, I' d个人避免它,相反,我会覆盖paintChildren
(因为paintComponent
将被绘制在其他所有东西之下)......Suggestions
避免
null
布局 . 他们比较值得更麻烦,你最好根据需要使用布局管理器,复合组件和EmptyBorder
的组合......小心你的
Thread
,Swing在线程管理方面有一些非常特殊的需求......