JavaSwing与JavaFX开发指南
立即解锁
发布时间: 2025-08-18 02:24:37 阅读量: 2 订阅数: 13 

### Java Swing与JavaFX开发指南
#### 1. Swing API 动画创建
在Java中,通过Swing API可以实现一些有趣的界面效果,比如创建动画按钮。下面是一个创建动画按钮的示例代码:
```java
public void mouseEntered(MouseEvent e) {
currentColor = startColor;
startTime = System.nanoTime() / 1000000;
timer.start();
}
@Override
public void mouseExited(MouseEvent e) {
currentColor = startColor;
animButton.setForeground(currentColor);
repaint();
timer.stop();
}
```
当鼠标进入按钮区域时,动画开始;鼠标离开时,动画停止。这里使用了`Swing`的`Timer` API来模拟动画时间线。以下是创建`Swing Timer`的代码:
```java
Timer timer = new Timer(30, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// every 30 milliseconds run code here...
}
});
```
整个动画的持续时间为250毫秒,当时间耗尽或鼠标离开按钮时,调用`timer.stop()`方法停止动画。在`actionPerformed()`方法中,调用`repaint()`方法刷新GUI。
#### 2. 使用JLayer组件进行表单验证
在开发表单应用时,验证用户输入是非常重要的。可以使用Java 7的`JLayer`组件来实现表单字段的验证,并通过图标提示用户。以下是一个验证电子邮件字段的示例代码:
```java
package org.java7recipes.chapter14.recipe14_24;
import java.awt.*;
import java.io.IOException;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.plaf.LayerUI;
public class UsingJXLayer extends JPanel {
public UsingJXLayer() {
setLayout(new BorderLayout(10, 20));
JPanel inputArea = new JPanel();
JLabel emailLbl = new JLabel("Email");
final JTextField emailFld = new JTextField(20);
Image error = null;
Image warning= null;
try {
error = ImageIO.read(this.getClass().getResource("error.png"));
warning = ImageIO.read(this.getClass().getResource("warning.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
LayerUI<JTextField> layerUI = new EmailValidationLayerUI(error, warning);
JLayer<JTextField> layeredEmail = new JLayer<>(emailFld, layerUI);
inputArea.add(emailLbl);
inputArea.add(layeredEmail);
add(inputArea, BorderLayout.NORTH);
JComponent buttonArea = new JPanel(new FlowLayout(FlowLayout.RIGHT));
final JButton saveButt = new JButton("Save");
buttonArea.add(saveButt);
add(buttonArea, BorderLayout.SOUTH);
}
public static void main(String[] args) {
final JPanel c = new UsingJXLayer();
c.setPreferredSize(new Dimension(402, 118));
// Queueing GUI work to be run using the EDT.
SimpleAppLauncher.launch("Chapter 14-24 Using JLayer.", c);
}
}
class EmailValidationLayerUI extends LayerUI<JTextField> {
Image errorImg;
Image warningImg;
public EmailValidationLayerUI(Image error, Image warning) {
this.errorImg = error;
this.warningImg = warning;
}
@Override
public void paint(Graphics g, JComponent comp) {
super.paint(g, comp);
JLayer jlayer = (JLayer) comp;
JTextField emailFld = (JTextField) jlayer.getView();
String text = emailFld.getText();
String regEx = ".+@.+\\.[A-Za-z]+";
int x = comp.getWidth() - 12;
int y = (comp.getHeight() - 8) / 2;
if (text.length() > 0 &
```
0
0
复制全文
相关推荐










