您的問題:
JFrame can't be accessed from the actionPerformed()
解決的辦法是,你不能從其他方法來訪問一個局部變量 看看here 和here
現在最重要的事情: 你在您的JFrame
上有兩個JPanel
s。因此,如果您更改JFrame
的顏色,那麼您將無法通過 查看顏色變化。所以我的建議是改變JPanel
的顏色。 採取下面的代碼的例子:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class HandlerClass extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
HandlerClass frame = new HandlerClass();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public HandlerClass() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};
gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0};
gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
contentPane.setLayout(gbl_contentPane);
JButton btnRed = new JButton("Red");
GridBagConstraints gbc_btnRed = new GridBagConstraints();
gbc_btnRed.insets = new Insets(0, 0, 5, 5);
gbc_btnRed.gridx = 3;
gbc_btnRed.gridy = 1;
contentPane.add(btnRed, gbc_btnRed);
JButton btnBlue = new JButton("Blue");
GridBagConstraints gbc_btnBlue = new GridBagConstraints();
gbc_btnBlue.insets = new Insets(0, 0, 5, 0);
gbc_btnBlue.gridx = 5;
gbc_btnBlue.gridy = 1;
contentPane.add(btnBlue, gbc_btnBlue);
JButton btnWhite = new JButton("White");
GridBagConstraints gbc_btnWhite = new GridBagConstraints();
gbc_btnWhite.insets = new Insets(0, 0, 0, 5);
gbc_btnWhite.gridx = 3;
gbc_btnWhite.gridy = 2;
contentPane.add(btnWhite, gbc_btnWhite);
JButton btnGreen = new JButton("Green");
GridBagConstraints gbc_btnGreen = new GridBagConstraints();
gbc_btnGreen.gridx = 5;
gbc_btnGreen.gridy = 2;
contentPane.add(btnGreen, gbc_btnGreen);
btnRed.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
contentPane.setBackground(Color.red);
}
});
btnBlue.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
contentPane.setBackground(Color.blue);
}
});
btnWhite.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
contentPane.setBackground(Color.WHITE);
}
});
btnGreen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
contentPane.setBackground(Color.green);
}
});
pack();
}
}
屏幕截圖: ![enter image description here](https://i.stack.imgur.com/RvFGR.png)