【发布时间】:2014-01-17 01:56:30
【问题描述】:
我正在为一个辅助项目提出一些想法,我想使用 Java swing 创建一个 GUI,看起来不像来自 Windows95。我的想法之一是使用 JLabels 作为按钮而不是标准的 JButton。这将允许我根据自己的喜好自定义悬停、拖动和移动效果。
对MouseAdapter class 的研究应该可以让我做我想做的一切,不幸的是我在实现悬停效果时遇到了一些麻烦,因为JLabel 似乎没有更新。我曾尝试通过调用frame.update(getGraphics()); 直接更新框架,但这似乎不像我认为的那样有效。
我能否就如何正确更新标签获得一些建议。
注意:这只是一个示例,没有付出任何努力来有效地组织代码
public class Window extends JFrame {
/**
*
*/
private static final long serialVersionUID = 5259700796854880162L;
private JTextField textField;
private JLabel lblNewLabel;
static Window frame;
int i = 0;
public Window() {
JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(null);
lblNewLabel = new JLabel("New label");
lblNewLabel.setBackground(Color.LIGHT_GRAY);
lblNewLabel.setBounds(137, 38, 114, 70);
panel.add(lblNewLabel);
lblNewLabel.addMouseListener(new LabelAdapter());
textField = new JTextField();
textField.setBounds(122, 119, 86, 20);
panel.add(textField);
textField.setColumns(10);
}
private class LabelAdapter extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
textField.setText(String.valueOf(i));
i++;
}
@Override
public void mouseEntered(MouseEvent e) {
lblNewLabel.setBackground(Color.CYAN);
}
@Override
public void mouseExited(MouseEvent e) {
lblNewLabel.setBackground(Color.LIGHT_GRAY);
}
}
/**
* @param args
*/
public static void main(String[] args) {
frame = new Window();
frame.setSize(900, 700);
frame.setVisible(true);
}
}
【问题讨论】:
-
JLabel 默认是透明的。考虑禁用按钮内容和birder...
-
参考以下链接对你有帮助[link]stackoverflow.com/questions/11678722/…
-
出于花哨的原因使用标签组件而不是按钮在 gui 开发中是一种不好的做法。想想那些喜欢键盘导航的人。您的所有要求都可以通过
JButton来实现。
标签: java swing colors jlabel mouselistener