我想做的是在点击按钮1时在面板上设置一个鼠标听筒。然后,我想点击另一个按钮,改变MouseListener代码来做其他事情。
我不知道如何修改一个独特的鼠标听筒。
我试着设置一个按钮。为每个按钮执行操作(新的jLabel1.addMouseListener()),但它们会创建两个MouseListener实例。
我不想设置一个MouseListener为几个JButton,但几个JButton改变我的MouseListener的状态。
非常感谢:)
最好从一开始就给JLabel一个MouseListener,但如果是布尔型的if块,它将根据类布尔字段的状态打开或关闭功能。在按钮ActionListeners中,只需更改这些布尔字段的状态。例如,在下面的代码中,布尔标志labellistenron
在第一个JButton的ActionListener中打开或关闭。JLabel的MouseListener会检查此变量的状态,如果该标志仅为true,则会更改标签的背景色。类似地,对于其他布尔标志和其他ActionListener:
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class ButtonListener extends JPanel {
private static final String TURN_ON_MOUSE = "Turn On Mouse";
private static final String TURN_OFF_MOUSE = "Turn Off Mouse";
private JButton button1 = new JButton(TURN_ON_MOUSE);
private JButton button2 = new JButton("Button 2");
private JLabel label1 = new JLabel("Label 1");
private MouseListener labelListener = new LabelListener();
private boolean labelListenerOn = false;
private boolean labelChangeText = false;
public ButtonListener() {
label1.setOpaque(true);
label1.addMouseListener(labelListener);
button1.addActionListener(e -> {
if (labelListenerOn) {
labelListenerOn = false;
((JButton) e.getSource()).setText(TURN_ON_MOUSE);
} else {
labelListenerOn = true;
((JButton) e.getSource()).setText(TURN_OFF_MOUSE);
}
});
button2.addActionListener(e -> {
labelChangeText = true;
});
add(button1);
add(button2);
add(label1);
}
private class LabelListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
Color labelColor = label1.getBackground();
if (labelListenerOn) {
if (labelColor.equals(Color.RED)) {
label1.setBackground(null);
} else {
label1.setBackground(Color.RED);
}
// label1.repaint(); // per Rob Camick's comment, this is not necessary
}
if (labelChangeText) {
label1.setText("Hello World");
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
private static void createAndShowGui() {
ButtonListener mainPanel = new ButtonListener();
JFrame frame = new JFrame("ButtonListener");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}
如果你想变得更有趣,可以在M-V-C中查找“model view controller”,在这里你可以将程序逻辑(这里是布尔标志的状态)与程序视图代码(Swing GUI代码)分离,通常在它们自己的类中,然后使用一个主类来连接所有组件。这将增加一层间接性和复杂性,在这种情况下,这将是致命的,但在大型程序中,尤其是在可能会被更新、更改和扩展的程序中,从长远来看,这实际上会降低复杂性,并使程序更“可伸缩”——更易于扩展和修改。同样,我不建议你在这里这样做,但一定要仔细查看,以备将来可能使用。
问题内容: 假设我有类,并且其中的类具有可读和可写的属性: 是否可以只使用该方法而只使用该方法? 问题答案: 不可以,无法分配每个类别的访问权限。 考虑将您的类分为单独的接口,以便每个类仅获得一个具有所需接口的对象。例如: 当然,这涉及安全性,但这应该使您朝正确的方向进行思考。
我的GUI有一个从db文件筛选出的条目列表。对于每个条目,我都有一个selectjbutton,它显示每个条目的更多细节。 我试图实现的是让selectjbutton在按下时更改颜色,并在选择其他条目的按钮时恢复为原始颜色。 我目前拥有的代码将很好地更改所选颜色的按钮,但在选择其他条目的“详细信息”按钮时仍保持相同的颜色: 如何更改代码以获得此效果?
问题内容: 我试图衡量几种方法的执行时间。所以我在想做一个方法,而不是多次重复相同的代码。 这是我的代码: 假设我有,如何使用它来衡量执行时间? 问题答案: 方法不是Java中的一流对象,因此不能将它们作为参数传递。您可以将方法调用包装在扩展例如接口的匿名类中:
有没有一种方法让JSF支持bean导致页面上组件的更新?我不希望使用带有update属性的ajax组件来更新页面上的组件。我需要从JSF backing bean方法中触发更新。注页面上的更新可能发生在此方法完成之后或完成之前。我正在使用PrimeFaces,如果使用PrimeFaces有一个解决方案的话。
我正在创建一个测验,并创建了一个具有JFrame的类,它的作用类似于主菜单。在这个菜单上,我创建了一个JButton,我想打开单独的JDialog(其中包含问题等)。 JDialog是一个名为QuestionDialog.java独立类 这里是我在主菜单JFrame类中的代码,特别是我要打开新JDialog public static void main(String[]args){SwingUt