- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
package main;
import gameComponent.Game;
import gameComponent.Move;
import gameComponent.Player;
import gameComponent.Tile;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.Border;
import networking.ClientSideConnection;
import piece.Pawn;
import piece.Piece;
import piece.PieceColor;
public class GameHolderPanel extends JPanel {
private static final long serialVersionUID = 1L;
private volatile ClientSideConnection self = null;
private static GridBagConstraints grid = new GridBagConstraints();
public static final Dimension dim = new Dimension(Tile.size,Tile.size);
public static final Dimension scaledDim = new Dimension(Tile.scaledSize,Tile.scaledSize);
public static final Border selectedBorder = BorderFactory.createLineBorder(Color.red);
public static final Border legalMoveBorder = BorderFactory.createLineBorder(Color.blue);
public static final Border nullBorder = BorderFactory.createEmptyBorder();
private Piece selectedPiece = null;
private int selectedHeldPiece = -1;
private ArrayList<Move> legalMoveList = new ArrayList<Move>();
private void clearLegalMoves() {
for(Move m : legalMoveList) {
getLabel(m.toTile.x,m.toTile.y).setBorder(nullBorder);
}
legalMoveList.clear();
}
private static final String[] promotionString = {"Queen", "Knight", "Rook", "Bishop"};
public JComboBox<String> promotionList = new JComboBox<String>(promotionString);
private Dimension d = null;
private JPanel whiteLabelPanel = new JPanel();
private JLabel whiteLabel = new JLabel();
private JPanel blackLabelPanel = new JPanel();
private JLabel blackLabel = new JLabel();
private JLabel[] xAxisLabel = new JLabel[8];
private JLabel[] yAxisLabel = new JLabel[8];
private JLabel[][] label = new JLabel[8][8];
private ArrayList<JLabel> heldPieces = new ArrayList<JLabel>();
private ArrayList<JLabel> oppHeldPieces = new ArrayList<JLabel>();
private JPanel heldPiecesPanel = new JPanel();
private JPanel oppHeldPiecesPanel = new JPanel();
private JScrollPane heldPiecesScrollPane = new JScrollPane(heldPiecesPanel);
private JScrollPane oppHeldPiecesScrollPane = new JScrollPane(oppHeldPiecesPanel);
private JLabel getLabel(int x, int y) {
if(pc == PieceColor.W) {
return label[y][x];
}
else {
return label[7-y][7-x];
}
}
public Game g = null;
private PieceColor pc = null;//player's or partner's color (ie color of the bottom player)
public GameHolderPanel(Game g, PieceColor color, ClientSideConnection self, Dimension d) {
this.g = g;
this.pc = color;
this.d = d;
this.self = self;
initPanel();
}
private void initPanel() {
setLayout(new GridBagLayout());
float fontSizeScaled = 9.0f;//this needs to be a float because int references the style not fontSize
whiteLabel.setText("White");
whiteLabelPanel.setBackground(Color.white);
if(d != dim) whiteLabel.setFont(whiteLabel.getFont().deriveFont(fontSizeScaled));
whiteLabelPanel.add(whiteLabel);
grid.gridwidth = 2;
if(d != dim) grid.gridwidth = 3;
grid.gridx = 1;
grid.gridy = 0;
add(whiteLabelPanel, grid);
blackLabel.setText("Black");
if(d != dim) blackLabel.setFont(blackLabel.getFont().deriveFont(fontSizeScaled));
blackLabel.setForeground(Color.white);
blackLabelPanel.setBackground(Color.black);
blackLabelPanel.add(blackLabel);
grid.gridx = 3;
if(d != dim) grid.gridx = 4;
grid.gridy = 0;
add(blackLabelPanel,grid);
grid.gridwidth = 3;
grid.gridx = 5;
grid.gridy = 0;
add(promotionList, grid);
for(int i = 0;i<30;i++) {//30 is the maximum number of held pieces: 16P, 4N, 4B, 4R, 2Q
JLabel newHeldPiece = new JLabel();
heldPieces.add(newHeldPiece);
heldPiecesPanel.add(newHeldPiece);
JLabel newOppHeldPiece = new JLabel();
oppHeldPieces.add(newOppHeldPiece);
oppHeldPiecesPanel.add(newOppHeldPiece);
}
heldPiecesPanel.setBorder(nullBorder);
heldPiecesPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
((FlowLayout) heldPiecesPanel.getLayout()).setVgap(0);
((FlowLayout) heldPiecesPanel.getLayout()).setHgap(0);
oppHeldPiecesPanel.setBorder(nullBorder);
oppHeldPiecesPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
((FlowLayout) oppHeldPiecesPanel.getLayout()).setVgap(0);
((FlowLayout) oppHeldPiecesPanel.getLayout()).setHgap(0);
if(this.g.pW.partner != null) {
grid.gridx = 1;
grid.gridy = 1;
grid.gridwidth = 8;
oppHeldPiecesScrollPane.setPreferredSize(new Dimension(grid.gridwidth*d.width, 2*Tile.scaledSize+1));
oppHeldPiecesScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
oppHeldPiecesScrollPane.setBorder(nullBorder);
add(oppHeldPiecesScrollPane, grid);
grid.gridy = 12;
heldPiecesScrollPane.setPreferredSize(new Dimension(grid.gridwidth*d.width, 2*Tile.scaledSize+1));
heldPiecesScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
heldPiecesScrollPane.setBorder(nullBorder);
add(heldPiecesScrollPane, grid);
}
grid.gridwidth = 1;
initBoard();
}
private void initBoard() {
int addLine = 0;//used to add a line to make room for the heldPieces of the opponent (top of board)
if(this.g.pW.gameCount > 1) {
addLine = 1;
}
for(int i = 0;i<8;i++) {
yAxisLabel[i] = new JLabel();
if(pc == PieceColor.W) {
yAxisLabel[i].setText(String.valueOf(8-i));
}
else {
yAxisLabel[i].setText(String.valueOf(i+1));
}
grid.gridx = 0;
grid.gridy = i+2+addLine;
add(yAxisLabel[i],grid);
for(int j = 0;j<8;j++) {
label[i][j] = new JLabel();
label[i][j].setPreferredSize(d);//necessary to prevent the resizing onClick (adds border)
grid.gridx = j+1;
grid.gridy = i+2+addLine;
add(label[i][j],grid);
}
}
grid.gridy = 10+addLine;
for(int i = 0;i<8;i++) {
xAxisLabel[i] = new JLabel();
if(pc == PieceColor.W) {
xAxisLabel[i].setText(String.valueOf((char) (97+i)));
}
else {
xAxisLabel[i].setText(String.valueOf((char) (97+7-i)));
}
grid.gridx = i+1;
add(xAxisLabel[i],grid);
}
}
public void updateGame(Game g) {
this.g = g;
drawBoard();
}
public void drawBoard() {
//display who's turn it is
if(g.turn.color == PieceColor.W) {
whiteLabelPanel.setBorder(selectedBorder);
blackLabelPanel.setBorder(nullBorder);
}
else {
whiteLabelPanel.setBorder(nullBorder);
blackLabelPanel.setBorder(selectedBorder);
}
//display a winner
if(g.getWinner() != null) {
if(g.getWinner().color == PieceColor.W) {
whiteLabelPanel.setBorder(legalMoveBorder);
blackLabelPanel.setBorder(nullBorder);
}
else {
whiteLabelPanel.setBorder(nullBorder);
blackLabelPanel.setBorder(legalMoveBorder);
}
}
//draws board
for(int i = 0;i<8;i++) {
for(int j = 0;j<8;j++) {
getLabel(j,i).setIcon((d == dim) ? g.board[i][j].getIcon() : g.board[i][j].getSmallIcon());
}
}
//draws the pieces held/queued-up by the player
Player player;
if(pc == g.pW.color) {
player = g.pW;
}
else {
player = g.pB;
}
for(int i = 0;i<heldPieces.size();i++) {
if(i < player.heldPieces.size()) {
heldPieces.get(i).setIcon(Tile.getHeldIcon(player.heldPieces.get(i), true));
}
else if(i < player.heldPieces.size()+player.queuingPieces.size()) {
heldPieces.get(i).setIcon(Tile.getHeldIcon(player.queuingPieces.get(i - player.heldPieces.size()), false));
}
else {
heldPieces.get(i).setIcon(null);
}
}
heldPiecesScrollPane.revalidate();
for(int i = 0;i<oppHeldPieces.size();i++) {
if(i < player.opponent.heldPieces.size()) {
oppHeldPieces.get(i).setIcon(Tile.getHeldIcon(player.opponent.heldPieces.get(i), true));
}
else if(i < player.opponent.heldPieces.size()+player.opponent.queuingPieces.size()) {
oppHeldPieces.get(i).setIcon(Tile.getHeldIcon(player.opponent.queuingPieces.get(i - player.opponent.heldPieces.size()), false));
}
else {
oppHeldPieces.get(i).setIcon(null);
}
}
oppHeldPiecesScrollPane.revalidate();
}
public void initLabelClicks(final Player p) {
//for the Player's board
for(int i = 0;i<8;i++) {
for(int j = 0;j<8;j++) {
final int x = j;
final int y = i;
getLabel(x,y).addMouseListener(new MouseListener() {
@Override
public void mousePressed(MouseEvent arg0) {
if(g.turn.equals(p)) {
if(selectedPiece == null) {
if(g.board[y][x].getPiece() != null) {
if(g.board[y][x].getPiece().getColor() == p.color) {
selectedPiece = g.board[y][x].getPiece();
getLabel(x,y).setBorder(selectedBorder);
for(Move m : selectedPiece.getLegalMoves(g, false)) {
legalMoveList.add(m);
getLabel(m.toTile.x, m.toTile.y).setBorder(legalMoveBorder);
}
}
}
}
else if(selectedPiece == g.board[y][x].getPiece()) {
clearLegalMoves();
getLabel(x,y).setBorder(nullBorder);
selectedPiece = null;
}
else {
if(selectedPiece.loc != null) {
Move m = new Move(selectedPiece, g.board[y][x], p);
if(selectedPiece instanceof Pawn && (y == 0 || y == 7)) {
m.moveType = Move.MoveType.getPromotionType(promotionList.getSelectedIndex());
}
if(g.isLegalMove(m)) {
self.send(m);
getLabel(selectedPiece.getX(),selectedPiece.getY()).setBorder(nullBorder);
selectedPiece = null;
clearLegalMoves();
}
}
else {
Move m = new Move(selectedPiece, g.board[y][x], p);
m.moveType = Move.MoveType.PLACEMENT;
if(g.isLegalMove(m)) {
self.send(m);
heldPieces.get(selectedHeldPiece).setBorder(nullBorder);
selectedPiece = null;
clearLegalMoves();
}
}
}
}
}
@Override
public void mouseClicked(MouseEvent arg0) {}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});
}
}
//for the Player's held pieces
for(int i = 0;i<30;i++) {//30 is the maximum number of held pieces: 16P, 4N, 4B, 4R, 2Q
final int x = i;
heldPieces.get(i).addMouseListener(new MouseListener() {
@Override
public void mousePressed(MouseEvent arg0) {
if(g.turn.equals(p) && g.turn.heldPieces.size() > x) {
if(selectedPiece == null) {
selectedPiece = g.turn.heldPieces.get(x);
selectedHeldPiece = x;
heldPieces.get(x).setBorder(selectedBorder);
for(Move m : selectedPiece.getLegalPlacement(g)) {
legalMoveList.add(m);
getLabel(m.toTile.x, m.toTile.y).setBorder(legalMoveBorder);
}
}
else if(selectedPiece == g.turn.heldPieces.get(x)) {
clearLegalMoves();
heldPieces.get(x).setBorder(nullBorder);
selectedPiece = null;
selectedHeldPiece = -1;
}
}
}
@Override
public void mouseClicked(MouseEvent arg0) {}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});
}
}
}
我在运行代码时不断收到此错误“找不到 javax.swing.JComponent 的类文件。”在 eclipse 靛蓝中。我也有netbeans,但我似乎在那里得到了JComponent,所以我现在有点困惑。
最佳答案
您没有导入它。
import javax.swing.JComponent;
关于Java编译错误(javax.swing.JComponent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817537/
这个问题已经有答案了: Mirroring an Object in JFrame with paintComponent (1 个回答) 已关闭 6 年前。 我已经知道 JComponent 无法添
我在绘制 jcomponent 时遇到问题 //应在其中绘制矩形的类 public class Board extends JComponent { private Case[][] case
在 Swing 中,鼠标事件会自动定位到具有鼠标监听器的最深组件。当有一个组件具有鼠标监听器并添加到其他组件之上时,如何将它们再次定位到更深的组件? 应该在不将组件设置为不可见或删除其鼠标监听器的情况
最近我在使用 Swing 时遇到了一些问题。我正在尝试快速制作下图所示的内容,以说明算法的数据结构。 (来源:ius.edu) 我在接下来的类(class)中尝试做的就是画出一些带有数字的矩形。并翻译
我已经阅读了 oracle 提供的 Java trail,他们说对象属性设置为与操作属性相匹配。我想知道这是否是一组有限的共享属性,或者是否将 Action 强制转换为与您将操作设置为的对象相同的类。
我有一个 JCombobox,我在运行时添加一些项目。其中一些非常长,我的 Jcombobox 也长得很长。它位于带有 BoxLayout (PAGE_AXIS) 的 JPanel 容器中。我不知道如
我正在处理一个项目,该项目要求我能够在同一容器内的组件顶部绘制半透明的 JPanel。使用 setComponentZOrder() 方法对于重叠(即下方的组件未完全覆盖)效果很好,但当下方的组件完全
目前,我必须将 JComponent 包含在具有垂直框布局的 JPanel 中。这样,我可以将第一个组件居中,如下所示,并将底部组件(相当长)放在下面。但是,由于底部组件非常长,我想仅为该特定组件添加
我有一个 JComponent 子类,我用它在屏幕上绘制形状。在构造函数中,我尝试将 ballX 和 ballY 设置为 X 和 Y 大小值的一半JComponent,我想我做错了。我现在已经查了很多
我想完成一些与带有选择器线的矩形图像非常相似的事情。 基本上,我有一个矩形,我想在它周围有一条选择器线。为此,我想创建一个额外的 JComponent。 目前我只能绘制矩形。如何在 Rectangle
到目前为止,我一直在使用 VB 来开发应用程序。现在我必须使用Java来开发前端。我对组件很困惑。需要帮助。书籍引用或网站引用也可以完成这项工作。 基本上,我将使用菜单栏、工具栏、带有 JEditor
我有一个自定义 JComponent,它在调用 paint 时绘制一些内容。但是,在 Border 布局中,它的 minimumSize 并未得到尊重。我已经包含了这个 @Override publi
我是一名初学者程序员,我正在尝试让这个程序运行。尽管 JComponent 的新 Java 屏幕上没有出现任何图像,但一切都可以正确编译。该程序要做的几乎就是获取一个输入值并将其分配给条形图的大小值。
我有以下代码: package gui; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; imp
如何获取JComponent名称(JComboBox,JCheckBox,JTextComponent...等) 我如何获取 fieldName 并将此名称放入 HashMap,例如:
我在面板上有一个 JTable 和一个 JLabel。我将其设置为背景图像,但无法摆脱表格和标签中的灰色背景。 我该怎么做? 最佳答案 尝试在 JTable 和 JLabel 上执行 .setOpaq
我正在尝试将组件添加到我的 JPanel,但是它们的大小不正确且位置不正确。这是我的组件代码。 button = new JButton(); button.setSize(100, 100); bu
好的。我正在编写我的 Ball 类,但球没有显示。我尝试将其他组件添加到我的容器中并且它们被显示,所以我认为可以安全地假设问题出在我的球上。类代码: import java.awt.Color; im
作为项目的一部分,我有一个自定义 JComponent,它实现了一部分用户界面。这是一个相当奇怪的控制,涉及围绕一组 x-y 点移动,但这并不重要,因为它已经实现并且工作正常。 该组件有一个正方形的可
嗨,我是java初学者,这里我有我的程序,但是,当我尝试调整面板大小时,我的文本就消失了?此外,如何在文本下绘制一条粗绿线,即使在调整大小时它也会保留在文本下方,我很无能? import javax.
我是一名优秀的程序员,十分优秀!