我正在用Java创建一个免费的跨平台模拟设计器。我设计了UI&能够在Panel上添加组件(由用户选择)。现在我希望做以下事情 -
1.在应用程序运行时使添加的组件重新调整大小。我的意思是当鼠标指针位于该组件的边界时,我想显示双头箭头,以便用户开始拖动鼠标指针和放大器。它的大小增加或减少。
2.拖动时面板内部组件的平滑移动(此时看起来令人沮丧,因为它在移动时闪烁(闪烁)并将其自身放在另一个位置而不是鼠标指针热点!)
3.有些组件(通过从组件窗格中选择该组件然后单击面板添加到面板期间)放置在远离预期点(热点)的位置。 这是拖动代码:
public void dragControl(MouseEvent evt)
{
JComponent jc=(JComponent)evt.getSource();
if((evt.getX()<drawingPane.getWidth()-64)&&(evt.getY()<drawingPane.getHeight()-32))
{
jc.setLocation(evt.getX(),evt.getY());
drawingPane.validate();
}
}
这是一个用于在面板中添加组件的方法。(drawingpane)
private void finalizeControlAddition(JComponent c,JComponent cont,MouseEvent evt,int width,int height)
{
if((evt.getX()<drawingPane.getWidth()-width)&&(evt.getY()<drawingPane.getHeight()-height))
addComponent(cont,c,evt.getX(),evt.getY(),width,height);
//
c.setName(Integer.toString(counter));//save a tag of its identification
//
components.add(counter, c);
counter++;
//
selectedControl=-1;
//
cont.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
//
statusLabel.setText("Control added.Drag to give proper position or select to change properties from Properties pane.");
}
private void addComponent(Container container,Component c,int x,int y,int width,int height)
{
c.setBounds(x,y,width,height);
container.add(c);
c.repaint();
}
答案 0 :(得分:1)
经过努力,我解决了这些问题。由于这些是任何人可能面临的非常常见的问题,因此我创建了一个开放式库,用于执行您可以在应用中使用的所有这些任务。它可以在这里找到: