【发布时间】:2021-11-16 11:18:23
【问题描述】:
我已经尝试重新排列这一大堆,并使用不同的方法,这些方法不是静态的,但按钮永远不会出现。所有这些代码都是为国际象棋而设计的,但我正在努力添加按钮以使其可玩,而在过去的几天里,我一直在努力解决这个问题。还有其他问题,例如鼠标没有做任何事情,但我只是删除了所有内容以尝试专注于按钮。 一个
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Main extends Canvas implements ActionListener, MouseListener {
private static JButton try144Button = new JButton();
public static void main(String[] args) {
JFrame frame = new JFrame("Chess");
Canvas canvas = new Main();
canvas.setSize(1000, 1000);
frame.add(canvas);
frame.add(try144Button);
frame.pack();
frame.setVisible(true);
}
public Main(){
try144Button.setBounds(0, 0, 500, 500);
try144Button.setText("CLICK ME");
try144Button.setBounds(210, 60, 150, 150);}
private void add(JButton try144Button) {
}
public void paint(Graphics g) {
int xshift;
int yshift = 0;
g.setColor(new Color(0, 0, 0));
for (int i = 0; i < 4; i++) {
xshift = 125;
for (int j = 0; j < 4; j++) {
g.fillRect(xshift, yshift, 125, 125);
xshift += 250;
}
xshift = 0;
yshift += 125;
for (int k = 0; k < 4; k++) {
g.fillRect(xshift, yshift, 125, 125);
xshift += 250;
}
yshift += 125;
}
initalprnt(g);
}
public void initalprnt(Graphics g) {
int xshift = 125;
int yshift = 0;
g.setColor(new Color(0, 100, 0));
for (int i = 0; i < 3; i++) {
if (i == 2) {
xshift = 125;
}
for (int j = 0; j < 4; j++) {
g.fillOval(xshift, yshift, 125, 125);
xshift += 250;
}
xshift = 0;
yshift += 125;
}
yshift += 250;
g.setColor(new Color(0, 0, 100));
for (int k = 0; k < 3; k++) {
if (k == 2) {
xshift = 0;
}
for (int j = 0; j < 4; j++) {
g.fillOval(xshift, yshift, 125, 125);
xshift += 250;
}
xshift = 125;
yshift += 125;
}
}
public void actionPerformed(ActionEvent evt) {
Object src = evt.getSource();
if (src == try144Button)
System.out.println("this worked");
}
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
【问题讨论】:
-
1) 不要使用画布。自定义绘画是通过覆盖 JPanel(或 JComponent)的 paintComponent() 来完成的。有关更多信息和工作示例,请参阅 Custom Painting 上的 Swing 教程。 2)将按钮添加到框架时,需要指定BorderLayout约束。阅读 How to Use BorderLayout 上的 Swing 教程。为所有 Swing 基础知识的示例保留指向教程的链接。
-
我以为画布搞砸了,谢谢。
-
那么,第一个问题是,你为什么使用
Canvas?第二个问题是,你为什么要打破油漆链(超级调用)? -
避免手动设置边界,使用
frame.add(try144Button, BorderLayout.SOUTH);并阅读链接教程以了解原因。 -
我对编程很陌生,这就是我被告知要画东西的方式