我使用的是swing,有一个函数(CreateAndShowGUI())可以监听上、左、右键的按下
现在,当我运行程序并按下任意键(向上、向左、向右、向下)时,我可以看到按下的键变量被设置为True。但当我试图在main中访问相同的内容时,按下的这个键的值为false。谁能帮我找出我错的地方吗?
public class table1 {
public static class Global {
// public static boolean key_pressed=false;
public static int[][] a={{2,8,32,64},{2,4,16,16},{16,128,8,64},{2,4,8,16}};
}
public static boolean key_pressed=false;
public static JTable table;
public static JFrame frame=new JFrame("FrameDemo");
public static void createAndShowGUI() {
//Create and set up the window.
//frame =
frame.setPreferredSize(new Dimension(875, 800));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setIconImage(new ImageIcon("menu.jpg").getImage());
JLabel emptyLabel = new JLabel("");
emptyLabel.setFocusable(true);
Action left_action = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
key_pressed=true;
System.out.println("left");
//do nothing
}
};
Action right_action = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
key_pressed=true;
System.out.println("right");
//do nothing
}
};
Action up_action = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
key_pressed=true;
System.out.println("up");
//do nothing
}
};
Action down_action = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println("down");
//do nothing
}
};
emptyLabel.getInputMap().put(KeyStroke.getKeyStroke("LEFT"),"left");
emptyLabel.getActionMap().put("left", left_action);
emptyLabel.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"),"right");
emptyLabel.getActionMap().put("right", right_action);
emptyLabel.getInputMap().put(KeyStroke.getKeyStroke("UP"),"up");
emptyLabel.getActionMap().put("up", up_action);
emptyLabel.getInputMap().put(KeyStroke.getKeyStroke("DOWN"),"down");
emptyLabel.getActionMap().put("down", down_action);
emptyLabel.setPreferredSize(new Dimension(875, 800));
//frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
Font f = new Font("serif", Font.PLAIN, 15);
JLabel score_area = new JLabel();
score_area.setBounds(870-130,00, 130, 50);
score_area.setText("sample text");
emptyLabel.add(score_area);
/*JTable t1=addtable(Global.a);
emptyLabel.add(t1);
t1.setBounds(0, 80, 875,875-80);*/
//pnl.add(t1);
frame.add(emptyLabel);
frame.invalidate();
frame.validate();
frame.repaint();
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static JTable addtable(int[][] a)
{
System.out.println("add game_gui entered");
//a[0][0] +=1;
System.out.println("a value "+a[0][0]);
String[] columnNames = {"First Name",
"Last Name",
"Sport","sample"
};
Object[][] data1= new Object[4][4];
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++)
{
data1[i][j]=(Object)a[i][j];
}
}
Font f = new Font("serif", Font.PLAIN, 55);
table = new JTable( data1, columnNames);/*{
Object x;
JLabel label;
@Override
public Component prepareRenderer(TableCellRenderer renderer,
int row, int column) {
x=table.getModel().getValueAt(row, column);
// System.out.println(x+","+row+","+column);
label = (JLabel) super.prepareRenderer(renderer, row, column);
if(x ==(Object)2)
{
System.out.println(x+" "+row+" " +column);
label.setBackground(Color.YELLOW);
} else if(x==(Object)32) {
label.setBackground(Color.gray);
}
else if(x==(Object)
16) {
label.setBackground(Color.blue);
}
return label;
};
};*/
table.setRowHeight(125);
table.setEnabled(false);
DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
dtcr.setHorizontalAlignment(SwingConstants.CENTER);
table.getColumnModel().getColumn(0).setCellRenderer(dtcr);
int x=((Integer)table.getValueAt(0, 0)).intValue();
System.out.println("sdfsfsdfsfds"+x);
if(x==55)
System.out.println("hahahah "+x);
table.getColumnModel().getColumn(1).setCellRenderer(dtcr);
table.getColumnModel().getColumn(2).setCellRenderer(dtcr);
table.getColumnModel().getColumn(3).setCellRenderer(dtcr);
DefaultTableCellRenderer dtcr1 = new DefaultTableCellRenderer();
dtcr1.setBackground(Color.cyan);
table.repaint();
table.setFont(f);
return table;
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
//key_pressed=true;
createAndShowGUI();
while(true)
{
//System.out.println(key_pressed);
if(key_pressed)
{
key_pressed=false;
System.out.println("Hello");
}
}
}}
即使使用易失性解决了这个问题,我认为在您的main中正确(并推荐)使用os实例和类也会纠正这个问题。
当我看到你的代码时,我的第一个想法是“为什么他不使用类的名称来访问方法和类属性?”第二个问题是“内部类不应该声明为单例而不是静态的吗?”。我想知道我的第二个想法是否准确,因为我不知道是更有效还是“更好”使用静态还是单例,但肯定它也解决了这个问题。
干杯
正如@Lashane所提到的:使用易失性来key_pressed解决了这个问题。
问题内容: 我使用设置全局变量的代码无法正常工作。好像根本没有调用分配,但是没有脚本错误发生。 页面加载后,警报将显示我的期望值。它确认x =1。但是此后,我单击div并得到了一个未定义的JavaScript错误。如何正确添加此变量? 背景:上面的代码是我正在研究的项目中最少复制的示例,我们必须在AJAX响应期间执行javascript代码。大多数时候都能正常工作,但这会引起问题。 问题答案: E
问题内容: 我试图在量角器上设置一个全局变量,以在所有描述块中使用。 但这返回了以下错误: 我也看了这个问题:量角器angularJS全局变量 所以我试图以这种方式在conf.js中设置变量glob: 仍然有相同的错误。 如何在量角器测试中正确添加全局变量? 问题答案: 可以借助属性从量角器配置文件设置全局变量: 您可以使用规范中访问它。 请参阅参考配置文件。 params对象将直接传递到Prot
主要用于设置三级权限以及密码策略等。 该功能用于设置是否启用三级权限以及密码策略相关配置。参数设置完成后,需要5分钟后生效。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “系统配置/全局设置/全局设置” 菜单项,进入全局设置页面。 目前全局设置支持设置以下选项: 配额检查开关:设置是否启用配额检查,默认关闭配额检查。如用户有配额限制的要求,可以开启配额检查,开启后,用户可以在域或
目前仅支持字典设置和全局设置,参数配置后全局生效。 字典设置 用于自定义云管平台中常用菜单的显示名称。 全局设置 主要用于设置三级权限以及密码策略等。
1)加密设置 加密设置分为,PC加密设置和移动加密设置。 PC加密设置: 当PC加密为“打开”状态时,新上传的视频会进行加密(加密视频只能使用获得场景视频播放器),已上传的视频保持不变。 当PC加密为“关闭”状态时,新上传的视频不会进行加密,已上传的视频保持不变。 移动加密设置: 非加密——当设置成【非加密】时,移动端将不受限制,此时不受保护。 WEB授权——可以在移动WEB端播放和APP端播放,
在直播管理页面点击 “全局设置” ,观看者可以在观看端对客户端进行打赏。打赏分为现金打赏 和 道具打赏 。 打赏设置 说明: 1)全局设置中支持配置现金打赏及道具打赏相关参数 2)直播间可应用全局打赏设置,应用后,观看端可对讲师进行打赏 敏感词设置 说明: 1)全局设置中支持设置敏感词,支持手动单个添加及应用模板批量导入 2)已添加的敏感词支持删除操作,也可一键情况敏感词列表 3)支持按角色进行过