这是文件1(我的教师更喜欢我们为每个扩展使用单独的文件)
import javax.swing.*;
import java.awt.*;
public class Lab2 extends JFrame {
Lab2(){
setTitle("Lab 1b - Application #2");
Lab2Panel p = new Lab2Panel();
add(p);
}
public static void main(String[] args){
Lab2 frame = new Lab2();
frame.setTitle("Lab2 Application # 1");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 400);
frame.setVisible(true);
}
}
文件2:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lab2Panel extends JPanel{
Lab2Button canvas = new Lab2Button();
JPanel panel = new JPanel();
Lab2Panel () {
setLayout(new BorderLayout());
JButton leftButton = new JButton("left");
JButton rightButton = new JButton("right");
JButton upButton = new JButton("up");
JButton downButton = new JButton("down");
panel.add(leftButton);
panel.add(rightButton);
panel.add(upButton);
panel.add(downButton);
this.add(canvas, BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH);
leftButton.addActionListener(new Lab2MoveBallListener());
}
}
文件3:
import javax.swing.*;
import java.awt.*;
public class Lab2Button extends JPanel {
int radius = 5;
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawOval(getWidth() / 2 - radius, getHeight() / 2 - radius, 2 * radius, 2 * radius);
}
public void moveLeft(){
this.add(this, BorderLayout.WEST);
this.repaint();
}
}
动作侦听器代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Lab2MoveBallListener implements ActionListener{
public void actionPerformed(ActionEvent e){
this.moveLeft();
}
}
当用户点击“向左”按钮时,我试图将圆圈移动到WEST边框布局。有人可以帮帮我吗。
答案 0 :(得分:3)
我不确定我是否理解这个GUI应该做什么,但这可以将圆圈向左移动。要点3)& 4)我的评论仍然需要解决。
以下是更改后的代码。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lab2 extends JFrame {
Lab2(){
setTitle("Lab 1b - Application #2");
Lab2Panel p = new Lab2Panel();
add(p);
}
public static void main(String[] args){
Lab2 frame = new Lab2();
frame.setTitle("Lab2 Application # 1");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 400);
frame.setVisible(true);
}
}
class Lab2Panel extends JPanel{
Lab2Button canvas = new Lab2Button();
JPanel panel = new JPanel();
Lab2Panel () {
setLayout(new BorderLayout());
JButton leftButton = new JButton("left");
JButton rightButton = new JButton("right");
JButton upButton = new JButton("up");
JButton downButton = new JButton("down");
panel.add(leftButton);
panel.add(rightButton);
panel.add(upButton);
panel.add(downButton);
this.add(canvas, BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH);
leftButton.addActionListener(new Lab2MoveBallListener(canvas));
}
}
class Lab2Button extends JPanel {
int radius = 5;
int x = -1;
int y = -1;
protected void paintComponent(Graphics g){
if (x<0 || y<0) {
x = getWidth() / 2 - radius;
y = getHeight() / 2 - radius;
}
super.paintComponent(g);
g.drawOval(x,y, 2 * radius, 2 * radius);
}
public void moveLeft(){
//this.add(this, BorderLayout.WEST);
x -= 5;
this.repaint();
}
}
class Lab2MoveBallListener implements ActionListener{
private Lab2Button canvas;
Lab2MoveBallListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveLeft();
}
}
..如何区分所执行动作中的按钮?
有很多方法。
if
/ else
语句ActionEvent.getActionCommand()
/ getSource()
选择正确的操作。 答案 1 :(得分:2)
我认为你对“this”关键字感到困惑。以下内容可能会让您更接近您想要的内容。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lab2Panel extends JPanel
{
Lab2Button canvas = new Lab2Button();
JPanel panel = new JPanel();
Lab2Panel ()
{
setLayout(new BorderLayout());
JButton leftButton = new JButton("left");
JButton rightButton = new JButton("right");
JButton upButton = new JButton("up");
JButton downButton = new JButton("down");
panel.add(leftButton);
panel.add(rightButton);
panel.add(upButton);
panel.add(downButton);
this.add(canvas, BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH);
leftButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Lab2Panel.this.remove(canvas);
Lab2Panel.this.add(canvas, BorderLayout.WEST);
Lab2Panel.this.repaint();
}
});
}
}
答案 2 :(得分:2)
这是我的建议,希望它适合你。
Lab2.java
import javax.swing.JFrame;
public class Lab2 extends JFrame
{
Lab2()
{
setTitle("Lab 1b - Application #2");
Lab2Panel p = new Lab2Panel();
add(p);
}
public static void main(String[] args)
{
Lab2 frame = new Lab2();
frame.setTitle("lab2 Application # 1");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 400);
frame.setVisible(true);
}
}
Lab2Panel.java
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Lab2Panel extends JPanel
{
Lab2Button canvas = new Lab2Button();
JPanel panel = new JPanel();
Lab2Panel()
{
setLayout(new BorderLayout());
JButton leftButton = new JButton("left");
JButton rightButton = new JButton("right");
JButton upButton = new JButton("up");
JButton downButton = new JButton("down");
panel.add(leftButton);
panel.add(rightButton);
panel.add(upButton);
panel.add(downButton);
this.add(canvas, BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH);
leftButton.addActionListener(new Lab2MoveBallListener(canvas));
rightButton.addActionListener(new Lab2MoveBallListener(canvas));
upButton.addActionListener(new Lab2MoveBallListener(canvas));
downButton.addActionListener(new Lab2MoveBallListener(canvas));
}
}
Lab2MoveBallListener.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Lab2MoveBallListener implements ActionListener
{
private Lab2Button canvas;
public Lab2MoveBallListener(Lab2Button canvas)
{
this.canvas = canvas;
}
@Override
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("left"))
{
canvas.moveLeft();
}
if (e.getActionCommand().equals("right"))
{
canvas.moveRight();
}
if (e.getActionCommand().equals("up"))
{
canvas.moveTop();
}
if (e.getActionCommand().equals("down"))
{
canvas.moveDown();
}
}
}
Lab2Button.java
import java.awt.Graphics;
import javax.swing.JPanel;
public class Lab2Button extends JPanel
{
int radius = 5;
int x = -1;
int y = -1;
protected void paintComponent(Graphics g)
{
if (x < 0 || y < 0)
{
x = getWidth() / 2 - radius;
y = getHeight() / 2 - radius;
}
super.paintComponent(g);
g.drawOval(x, y, 2 * radius, 2 * radius);
}
public void moveLeft()
{
x -= 5;
this.repaint();
}
public void moveRight()
{
x += 5;
this.repaint();
}
public void moveTop()
{
y -= 5;
this.repaint();
}
public void moveDown()
{
y += 5;
this.repaint();
}
}