如何更改JPanel';这是另一个班级的颜色。JAVA
我在更改另一个类的JPanels颜色时遇到问题。 我试图通过点击一个按钮来改变它。我正在创建一个应用程序,用户可以选择自己想要的颜色主题 头等舱:如何更改JPanel';这是另一个班级的颜色。JAVA,java,swing,Java,Swing,我在更改另一个类的JPanels颜色时遇到问题。 我试图通过点击一个按钮来改变它。我正在创建一个应用程序,用户可以选择自己想要的颜色主题 头等舱: public class First extends JFrame { public JPanel contentPane = new JPanel(); public JPanel panel = new JPanel(); public First() { JButton btnNewButton =
public class First extends JFrame {
public JPanel contentPane = new JPanel();
public JPanel panel = new JPanel();
public First() {
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Second s = new Second();
s.startSecond();
}
});
}
}
二等舱:
public class Second extends JFrame {
First f;
private JPanel contentPane;
public static void startSecond() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Second sframe = new faijaso();
sframe.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Second() {
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
f.panel.setBackground(Color.red);
f.panel.repaint();
f.panel.revalidate();
}
});
}
}
这段代码有几个问题,但最重要的是,您的
第一个f
变量从未初始化过,因此,如果您试图从中调用方法,程序将抛出NullPointerException。您当然不想创建一个newfirst()
并将其分配给f
,因为该实例将与已经存在的可视化First不同。而是将第二个构造函数更改为接受第一个参数,然后在调用第二个构造函数时传入当前实例
public Second(First f) {
this.f = f;
// ....
首先:
public First() {
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Second s = new Second();
s.startSecond(First.this); // pass in the First instance
}
});
}
其他问题--
- 在第二秒内去掉静态代码,因为不需要这样做。而是将第二个设置为在第一个ActionListener中可见
- 您确实不想使用两个JFrame,此链接将告诉您原因:
- 取而代之的是第二个JDialog
这个
实例传递到第二个的构造函数中,并使用它初始化f
变量。您将希望在第二秒内摆脱静态代码,而是在其构造函数中连接GUI。感谢您的快速回答!我会用JDialog试试。@Qubek:只要你明白这不是你当前问题的原因。当前的问题源于未正确初始化f
变量。