Java 设置程序未更新变量
我正在创建一个俄罗斯方块游戏,希望用户能够从3种不同的大小中选择自己的棋盘大小。我有一个板后端处理右,左,下,下降运动,我有一个板图形用户界面,创建形状和动画它。因此,当更新大小时,我需要同时更新主板的后端和GUI。我的大小不断被初始化回10 x 20,这是默认大小 这是我的BoadGUI代码片段(我删除了所有不必要的代码,我可能遗漏了一些东西,对不起) 这是我设置大小的主GUIJava 设置程序未更新变量,java,swing,actionlistener,setter,Java,Swing,Actionlistener,Setter,我正在创建一个俄罗斯方块游戏,希望用户能够从3种不同的大小中选择自己的棋盘大小。我有一个板后端处理右,左,下,下降运动,我有一个板图形用户界面,创建形状和动画它。因此,当更新大小时,我需要同时更新主板的后端和GUI。我的大小不断被初始化回10 x 20,这是默认大小 这是我的BoadGUI代码片段(我删除了所有不必要的代码,我可能遗漏了一些东西,对不起) 这是我设置大小的主GUI private int myWidth; private int myHeight; public MainGU
private int myWidth;
private int myHeight;
public MainGUI() {
super();
myWidth = 10;
myHeight = 20;
}
/**
*
*/
private static final long serialVersionUID = -5056050661369885282L;
private JMenuBar myMenuBar;
public void start() {
setTitle("Tetris");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myEastPanel = new JPanel(new BorderLayout());
NextPiece nextPanel = new NextPiece();
myBoardGUI = new BoardGUI(this, myWidth, myHeight);
myMainBoard = myBoardGUI.getBoard();
setResizable(false);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public JMenuBar createMenuBar() {
myMenuBar = new JMenuBar();
myWindow = new JMenu("Window");
final JFrame frame = this;
myMenuBar.add(myWindow);
setWindowSize();
myMenuBar.setVisible(true);
return myMenuBar;
}
private void setWindowSize() {
ButtonGroup group = new ButtonGroup();
JCheckBox def = new JCheckBox("Default");
JCheckBox size1 = new JCheckBox("150 x 250");
myWindow.add(def);
myWindow.addSeparator();
myWindow.add(size1);
group.add(def);
group.add(size1);
JFrame frame = this;
def.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
myWidth = 10;
myHeight = 20;
myBoardGUI.setPanelSize(myWidth,myHeight); //setting here
}
});
size1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// myBoardGUI.setPanelSize(15, 25);
myWidth = 15;
myHeight = 25;
myBoardGUI.setPanelSize(myWidth,myHeight); // Setting here
}
});
}
保存变量,但从不重置首选大小
this.setPreferredSize(new Dimension(myWidth * BLOCK_WIDTH, myHeight * BLOCK_WIDTH));
问题是您不应该使用setPreferredSize()方法。这使得大小固定而不是动态
相反,您应该覆盖面板的getPreferredSize()
方法。比如:
@Override
public Dimension getPreferredSize()
{
return new Dimension(myWidth * BLOCK_WIDTH, myHeight * BLOCK_WIDTH));
}
这将允许在Swing需要时动态计算大小
更新需要调用的变量后,现在在面板.setSize()方法中:
revalidate();
repaint();
因此,可以调用布局管理器并考虑面板的新大小。保存变量,但从不重置首选大小
this.setPreferredSize(new Dimension(myWidth * BLOCK_WIDTH, myHeight * BLOCK_WIDTH));
问题是您不应该使用setPreferredSize()方法。这使得大小固定而不是动态
相反,您应该覆盖面板的getPreferredSize()
方法。比如:
@Override
public Dimension getPreferredSize()
{
return new Dimension(myWidth * BLOCK_WIDTH, myHeight * BLOCK_WIDTH));
}
这将允许在Swing需要时动态计算大小
更新需要调用的变量后,现在在面板.setSize()方法中:
revalidate();
repaint();
因此,可以调用布局管理器,并考虑面板的新尺寸。如果您可以创建并发布一个有效的(请阅读链接了解此有用工具的重要细节),我们将非常高兴(您也可以,因为这可能会帮助您快速获得答案),我们可以运行一个,测试和修改。如果您可以创建并发布一个有效的(请阅读链接了解此有用工具的重要细节),我们可以运行、测试和修改该工具,这对我们(以及您,因为这可能会帮助您快速获得答案)将是非常好的。