Java 使用秋千的游戏场
我的任务有问题。我所说的问题是,我完全不知道该怎么做。我必须做一个窗口的领域,如图。字段数量(X X Y)应由用户设置。每个字段都应该能够单击(它们应该像按钮一样工作),单击后用户应该有一些选择(例如更改字段的颜色、名称等) 有什么建议我应该使用Swing的哪些组件,有什么教程吗?到目前为止我什么也没找到Java 使用秋千的游戏场,java,swing,grid,Java,Swing,Grid,我的任务有问题。我所说的问题是,我完全不知道该怎么做。我必须做一个窗口的领域,如图。字段数量(X X Y)应由用户设置。每个字段都应该能够单击(它们应该像按钮一样工作),单击后用户应该有一些选择(例如更改字段的颜色、名称等) 有什么建议我应该使用Swing的哪些组件,有什么教程吗?到目前为止我什么也没找到 我不再使用Swing了。我强烈建议改为使用JavaFX。但我也做了类似的事情(为我儿子做了一个奥赛罗游戏),然后我就用了一个JTable。您可以通过一些微调将几乎任何对象设置为表单元格对象,例
我不再使用Swing了。我强烈建议改为使用JavaFX。但我也做了类似的事情(为我儿子做了一个奥赛罗游戏),然后我就用了一个JTable。您可以通过一些微调将几乎任何对象设置为表单元格对象,例如特定颜色的图像,并且它附带了用于单击单元格的侦听器 同样的解决方案也适用于JavaFX,它使用一个表来显示可单击的图像 Swing中我的Table类示例:
package spelmeny.table;
import java.awt.Component;
import java.util.Enumeration;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import spelmeny.logik.GameModel;
import spelmeny.style.GameStyle;
/**
*
* @author stefan santesson
*/
public class OthelloTable {
JTable table;
GameModel gameModel;
DefaultTableModel tm;
String[] heading = new String[]{"1", "2", "3", "4", "5", "6", "7", "8"};
GameStyle style;
public OthelloTable(JTable table, GameModel gameModel, GameStyle style) {
this.table = table;
table.setRowHeight(GameStyle.CELL_SIZE);
this.gameModel = gameModel;
this.style = style;
}
public void setStyle(GameStyle style) {
this.style = style;
}
public void updateTable() {
int colCount = table.getColumnModel().getColumnCount();
Object[][] tableVal = new Object[colCount][8];
int[][] board = gameModel.getBoardData();
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
tableVal[row][col] = board[row][col];
}
}
for (int row = 0; row < 8; row++) {
for (int col = 0; col < colCount; col++) {
tm.setValueAt(tableVal[row][col], row, col);
}
}
}
public void setTable() {
tm = new MyTableModel(heading);
IconRenderer icnRenderer = new IconRenderer();
int[][] board = gameModel.getBoardData();
for (int row = 0; row < 8; row++) {
Object[] rowData = new Object[8];
for (int col = 0; col < 8; col++) {
rowData[col] = board[row][col];
}
tm.addRow(rowData);
}
table.setModel(tm);
Enumeration<TableColumn> columns = table.getColumnModel().getColumns();
for (int colIndex = 0; colIndex < 8; colIndex++) {
TableColumn cbCol = table.getColumnModel().getColumn(colIndex);
cbCol.setCellRenderer(icnRenderer);
columns.nextElement().setPreferredWidth(GameStyle.CELL_SIZE);
}
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
}
class MyTableModel extends DefaultTableModel {
public MyTableModel(Object[] os) {
super();
for (Object o : os) {
addColumn(o);
}
}
@Override
public Class getColumnClass(int columnIndex) {
switch (columnIndex) {
default:
return Integer.class;
}
}
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
}
class IconRenderer extends DefaultTableCellRenderer {
public IconRenderer() {
super();
}
@Override
public void setValue(Object value) {
if (value instanceof Integer) {
switch ((Integer) value) {
case GameModel.BLACK:
setIcon(style.getBlackIcn());
break;
case GameModel.WHITE:
setIcon(style.getWhiteIcn());
break;
case GameModel.POSSIBLE:
setIcon(style.getPossibleIcn());
break;
default:
setIcon(style.getEmptyIcn());
}
}
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Object firstColumnValue = table.getValueAt(row, 0);
setVerticalAlignment(JLabel.TOP);
setValue(value);
setBackground(table.getBackground());
setForeground(table.getForeground());
return this;
}
}
package spelmeny.table;
导入java.awt.Component;
导入java.util.Enumeration;
导入javax.swing.JLabel;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableCellRenderer;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableColumn;
导入spelmeny.logik.GameModel;
导入spelmeny.style.GameStyle;
/**
*
*@作者stefan santesson
*/
公共类OthelloTable{
JTable表;
博弈模型;
模型tm;
字符串[]标题=新字符串[]{“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”};
游戏风格;
公共OthelloTable(JTable表格、GameModel GameModel、GameStyle样式){
this.table=表格;
表.setRowHeight(游戏风格、单元格大小);
this.gameModel=gameModel;
这个。风格=风格;
}
公共无效设置样式(游戏样式){
这个。风格=风格;
}
公共void updateTable(){
int colCount=table.getColumnModel().getColumnCount();
Object[]tableVal=新对象[colCount][8];
int[][]board=gameModel.getBoardData();
用于(int行=0;行<8;行++){
for(int col=0;col<8;col++){
tableVal[行][col]=板[行][col];
}
}
用于(int行=0;行<8;行++){
for(int col=0;col
}我不再使用Swing了。我强烈建议改为使用JavaFX。但我也做了类似的事情(为我儿子做了一个奥赛罗游戏),然后我就用了一个JTable。您可以通过一些微调将几乎任何对象设置为表单元格对象,例如特定颜色的图像,并且它附带了用于单击单元格的侦听器 同样的解决方案也适用于JavaFX,它使用一个表来显示可单击的图像 Swing中我的Table类示例:
package spelmeny.table;
import java.awt.Component;
import java.util.Enumeration;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import spelmeny.logik.GameModel;
import spelmeny.style.GameStyle;
/**
*
* @author stefan santesson
*/
public class OthelloTable {
JTable table;
GameModel gameModel;
DefaultTableModel tm;
String[] heading = new String[]{"1", "2", "3", "4", "5", "6", "7", "8"};
GameStyle style;
public OthelloTable(JTable table, GameModel gameModel, GameStyle style) {
this.table = table;
table.setRowHeight(GameStyle.CELL_SIZE);
this.gameModel = gameModel;
this.style = style;
}
public void setStyle(GameStyle style) {
this.style = style;
}
public void updateTable() {
int colCount = table.getColumnModel().getColumnCount();
Object[][] tableVal = new Object[colCount][8];
int[][] board = gameModel.getBoardData();
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
tableVal[row][col] = board[row][col];
}
}
for (int row = 0; row < 8; row++) {
for (int col = 0; col < colCount; col++) {
tm.setValueAt(tableVal[row][col], row, col);
}
}
}
public void setTable() {
tm = new MyTableModel(heading);
IconRenderer icnRenderer = new IconRenderer();
int[][] board = gameModel.getBoardData();
for (int row = 0; row < 8; row++) {
Object[] rowData = new Object[8];
for (int col = 0; col < 8; col++) {
rowData[col] = board[row][col];
}
tm.addRow(rowData);
}
table.setModel(tm);
Enumeration<TableColumn> columns = table.getColumnModel().getColumns();
for (int colIndex = 0; colIndex < 8; colIndex++) {
TableColumn cbCol = table.getColumnModel().getColumn(colIndex);
cbCol.setCellRenderer(icnRenderer);
columns.nextElement().setPreferredWidth(GameStyle.CELL_SIZE);
}
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
}
class MyTableModel extends DefaultTableModel {
public MyTableModel(Object[] os) {
super();
for (Object o : os) {
addColumn(o);
}
}
@Override
public Class getColumnClass(int columnIndex) {
switch (columnIndex) {
default:
return Integer.class;
}
}
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
}
class IconRenderer extends DefaultTableCellRenderer {
public IconRenderer() {
super();
}
@Override
public void setValue(Object value) {
if (value instanceof Integer) {
switch ((Integer) value) {
case GameModel.BLACK:
setIcon(style.getBlackIcn());
break;
case GameModel.WHITE:
setIcon(style.getWhiteIcn());
break;
case GameModel.POSSIBLE:
setIcon(style.getPossibleIcn());
break;
default:
setIcon(style.getEmptyIcn());
}
}
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Object firstColumnValue = table.getValueAt(row, 0);
setVerticalAlignment(JLabel.TOP);
setValue(value);
setBackground(table.getBackground());
setForeground(table.getForeground());
return this;
}
}
package spelmeny.table;
导入java.awt.Component;
导入java.util.Enumeration;
导入javax.swing.JLabel;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableCellRenderer;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableColumn;
导入spelmeny.logik.GameModel;
导入spelmeny.style.GameStyle;
/**
*
*@作者stefan santesson
*/
公共类OthelloTable{
JTable表;
博弈模型;
模型tm;
字符串[]标题=新字符串[]{“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”};
游戏风格;
公共OthelloTable(JTable表格、GameModel GameModel、GameStyle样式){
this.table=表格;
表.setRowHeight(游戏风格、单元格大小);
this.gameModel=gameModel;
这个。风格=风格;
}
公共无效设置样式(游戏样式){
这个。风格=风格;
}
公共void updateTable(){
int colCount=table.getColumnModel().getColumnCount();
对象[][]tableVal=new