我有一个包含Panel的applet。在面板中添加一个按钮,单击该按钮将删除当前面板,新的面板将添加到当前的小程序。
但我没有得到所需的输出!!!
我想用ActionListener中的新Panel替换当前添加到Applet的显示面板。
请告诉错误!!
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JPanel;
public class Init extends JApplet {
public Display ref;
public NewDisplay ref2;
public class Display extends JPanel implements ActionListener {
public Display() {
initComponents();
}
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton1.setText("New Game");
add(jButton1);
jButton1.addActionListener(this);
}
public javax.swing.JButton jButton1;
@Override
public void actionPerformed(ActionEvent e) {
String x = e.getActionCommand();
if (x.equals("New Game")) {
System.out.println("clicked");
//ref.setVisible(false);
this.removeAll();
//add(ref2);
add(ref2);
invalidate();
revalidate();
repaint();
}
}
}
public class NewDisplay extends JPanel {
public NewDisplay() {
setSize(800, 600);
}
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillRect(0, 0, 800, 600);
}
}
@Override
public void init() {
ref = new Display();
ref2 = new NewDisplay();
add(ref);
setSize(800,600);
}
}
答案 0 :(得分:3)
您不应该使用setSize()方法来设置组件的大小。
布局管理器使用组件的首选大小。您应该覆盖面板的getPreferredSzie()方法以返回所需的大小。
public class NewDisplay extends JPanel {
public NewDisplay() {
// setSize(800, 600);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(800, 600);
}
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillRect(0, 0, 800, 600);
}
}
或者更好的解决方案是使用卡片布局,只需将面板转入和拉出即可。请参阅How to Use Card Layout。