该演示给出了有关如何获取JFrame组件的示例。在此示例中,我们尝试JFrame从按钮操作侦听器事件获取。为了得到JFrame我们使用的SwingUtilities.getRoot()方法,它将在小程序的下面返回组件树的根组件,该小程序是一个JFrame。
除了获取之外JFrame,在此程序中,我们还执行一些细小的操作,例如,每当用户按下“更改框架颜色”按钮时,将框架背景颜色更改为随机颜色。package org.nhooo.example.swing;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
public class GetFrameDemo extends JFrame {
public GetFrameDemo() throws HeadlessException {
initialize();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new GetFrameDemo().setVisible(true));
}
private void initialize() {
this.setSize(400, 100);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout(FlowLayout.CENTER));
final JLabel rLabel = new JLabel("r: ");
final JLabel gLabel = new JLabel("g: ");
final JLabel bLabel = new JLabel("b: ");
JButton button = new JButton("Change Frame Background Color");
button.addActionListener(e -> {
Component component = (Component) e.getSource();
// 返回当前组件树的根组件
JFrame frame = (JFrame) SwingUtilities.getRoot(component);
int r = (int) (Math.random() * 255);
int g = (int) (Math.random() * 255);
int b = (int) (Math.random() * 255);
rLabel.setText("r: " + r);
gLabel.setText("g: " + g);
bLabel.setText("b: " + b);
frame.getContentPane().setBackground(new Color(r, g, b));
});
this.getContentPane().add(button);
this.getContentPane().add(rLabel);
this.getContentPane().add(gLabel);
this.getContentPane().add(bLabel);
}
}