JME*_*JME 0 java swing colors jlabel mouselistener
我正在讨论一个侧面项目的一些想法,我想创建一个使用Java swing的GUI,它看起来不像来自Windows95.我正在努力的一个想法是使用JLabel作为按钮而不是标准的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);
}
}
Run Code Online (Sandbox Code Playgroud)
Window是名称的保留名称awt.Window,将此名称更改为例如MyWindow
JPanel已实现FlowLayout,你不能NullLayout使用build_in LayoutManager,然后使用JFrame.pack()之前JFrame.setVisible在屏幕上正确调整大小
JLabel 是透明的,通过使用来改变它 JLabel.setOpaque(true);
刷新Backgroung Color来自Mouse over/hover也不是没有可能JLabel.repaint()在混凝土中的最后一行代码mouse_event,repaint()在失踪JLabel API