![](/img/trans.png)
[英]Java MVC Where/When to get my view on EDT and how my controller do actions on EDT?
[英]Problem with EDT (Java) how to split few actions/events
基本上,我有一个JFrame
在这个框架中有一个JPanel
。 在面板顶部有四个JLabel
组件,我们称之为colorLabels
,在面板底部我有一个标签(我们称之为playerLabel
)。 我想实现下一件事。
顶部colorLabels
需要不时改变它们的颜色(少于一秒),并且它们需要,比如说,在底部发射弹丸。 在底部playerLabel
需要绕 x 轴移动,以便它可以阻挡镜头。
我的问题是,当我启动SwingWorker
或在任何线程colorLabels
,使他们能够拍出弹和改变颜色加班我EDT被封锁,所以我不能移动playLabel
(事件不工作)。 我的意思是他们工作,但同时, playerLabel
回到原来的位置。 (EDT 被封锁)
我的问题是,我怎么能拆的行动colorLabel
从行动(顶级品牌) playerLabel
(底部标签)?
如何让colorLabels
完成他们的工作并能够移动playerLabel
? 基本上,如何解除对 EDT 的阻止并且仍然有操作。
编辑:
static Point click;
static int thisX;
static int xMoved;
static int x;
static Integer elapsed = 0;
public static void main(String[] args) {
JFrame frame = new JFrame();
SpringLayout sp = new SpringLayout();
frame.setLayout(sp);
JLabel label = new JLabel("This is label");
label.setBorder(BorderFactory.createLineBorder(Color.red));
JLabel timeLabel = new JLabel("Time: ");
frame.add(label);
sp.putConstraint(SpringLayout.NORTH, label, 10, SpringLayout.NORTH, frame);
sp.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST, frame);
frame.add(timeLabel);
sp.putConstraint(SpringLayout.NORTH, timeLabel, 100, SpringLayout.NORTH, frame);
sp.putConstraint(SpringLayout.WEST, timeLabel, 100, SpringLayout.WEST, frame);
frame.setSize(600, 400);
frame.setVisible(true);
Timer t = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
elapsed++;
timeLabel.setText("Time: " + elapsed);
}
});
label.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
click = e.getPoint();
}
});
label.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
thisX = label.getLocation().x;
xMoved = (thisX + e.getX()) - (thisX + click.x);
x = thisX + xMoved;
label.setLocation(x, label.getLocation().y);
label.repaint();
}
});
t.start();
}
您将无法在有听众移动的标签周围移动。
那是因为您正在使用布局管理器。 即使您手动设置位置,布局管理器也会确定组件的大小/位置。
如果您需要动态移动组件的能力,那么您需要将组件添加到具有空布局的面板。 然后您将负责设置组件的初始大小/位置。
所以我建议你:
Basic Dragging
部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.