Java选择项
|
我刚开始用Java冒险。我编写了一个带有面板和三个按钮的应用程序。但是我有一个问题。我想使用鼠标添加选择此按钮。我的意思是就像我们在Windows桌面上一样。我按下鼠标左键,随着鼠标的移动,区域选择在增加。我有一个问题。有没有特定的接口,还是我有手动接口,请为事件侦听器调用适当的方法并绘制透明矩形?这是一张图片:
我取得了一些进步,但是我还有另一个问题。一切都很好,但是当我绘制矩形时,按钮正在重新绘制。当我绘制矩形时,我希望此按钮不消失。这是代码:
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class zaznacz extends JPanel implements MouseListener, MouseMotionListener
{
Rectangle newLine=null;
public zaznacz()
{
addMouseListener(this);
addMouseMotionListener(this);
}
static class Rectangle {
int x1,y1,x2,y2;
Rectangle(int _x1, int _y1,int _x2, int _y2){
x1=_x1;y1=_y1;x2=_x2;y2=_y2;
}
void paint(Graphics g)
{
g.drawRect(x1, y1, x2, y2);
}
}
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
startPoint=e.getPoint();
setOpaque(true);
Graphics2D g2 = (Graphics2D)getGraphics();
Rectangle2D prostokat = new Rectangle2D.Double();
prostokat.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y);
g2.setComposite(AlphaComposite.getInstance(rule, alpha));
g2.draw(prostokat);
g2.setColor(Color.BLUE);
g2.fill(prostokat);
}
@Override
public void mouseReleased(MouseEvent e)
{
repaint();
}
Point startPoint;
@Override
public void mouseDragged(MouseEvent e) {
setOpaque(true);
Graphics2D g2 = (Graphics2D)getGraphics();
Rectangle2D prostokat = new Rectangle2D.Double();
prostokat.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y);
g2.setComposite(AlphaComposite.getInstance(rule, alpha));
g2.draw(prostokat);
g2.setColor(Color.BLUE);
g2.fill(prostokat);
paintComponent(g2);
}
@Override
public void mouseMoved(MouseEvent e) {
}
int rule = AlphaComposite.SRC_OVER;
float alpha = 0.85F;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable()
{
public void run()
{
zaznacz rys = new zaznacz();
JFrame frame = new JFrame();
JButton Button = new JButton(\"1\");
JPanel panel = new JPanel();
panel.add(Button);
rys.add(panel);
frame.setSize(400,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setOpaque(false);
frame.add(rys);
}
});
}
}
有人可以帮助我吗?
没有找到相关结果
已邀请:
2 个回复
递劝臼类洪
还有许多其他可用的方法,但需要注意的是,许多开发人员(和用户)更喜欢使用系统的默认外观,而不是Java Swing组件的默认外观。
闪票仇门韧