【发布时间】:2015-11-16 21:53:08
【问题描述】:
我有一个带有两个按钮的 Jframe:“1”和“2”。单击按钮“1”应在 JPanel 中显示大写字母 A。
为我的 JFrame 编写代码:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawFrame extends JFrame{
private final int WIDTH = 500;
private final int HEIGHT = 300;
private JButton number1;
private JButton number2;
private JPanel numberPanel;
private DrawPanel graphicsPanel;
public DrawFrame()
{
createSelectionPanel();
createGraphicsPanel();
this.setSize(WIDTH, HEIGHT);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private void createSelectionPanel()
{
numberPanel = new JPanel();
number1 = new JButton("1");
number2 = new JButton("2");
numberPanel.setLayout(new GridLayout(2,2));
numberPanel.add(number1);
numberPanel.add(number2);
this.add(numberPanel, BorderLayout.WEST);
}
private void createGraphicsPanel()
{
//instantiate drawing panel
graphicsPanel = new DrawPanel();
//add drawing panel to right
add(graphicsPanel);
}
private class Number1ButtonListener implements ActionListener {
public void actionPerformed (ActionEvent event) {
Number number = new Number();
number.setNumber('A');
}
}
//creates a drawing frame
public static void main(String[] args)
{
DrawFrame draw = new DrawFrame();
}
}
我的 JPanel 的代码
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class DrawPanel extends JPanel{
public Coordinates current;
public DrawPanel(){
//nothing drawn initially
current = null;
//set white background for drawing panel
setBackground(Color.WHITE);
//add mouse listeners
MouseHandler mouseHandler = new MouseHandler();
this.addMouseListener(mouseHandler);
this.addMouseMotionListener(mouseHandler);
}
public void paint(Graphics g){
super.paint(g);
if(current!=null){
我想用 number.getNumber() 替换“A”
g.drawString("A", current.getX(), current.getY());
}
}
//class to handle all mouse events
private class MouseHandler extends MouseAdapter implements MouseMotionListener
{
public void mousePressed(MouseEvent event)
{
current = new Coordinates(event.getX(), event.getY());
}
public void mouseReleased(MouseEvent event)
{
repaint();
}
}
}
我不确定这是否可能。很抱歉,如果我的逻辑有误。请为我提供解决此问题的替代方法。感谢任何指导。
谢谢!
【问题讨论】:
-
你的代码让我很困惑。您在这里使用的
Number类是什么Number number = new Number();?您使用的坐标类是什么?我看到这宣布无处可去。您在哪里将 ActionListener 添加到您的 JButton?你的 MouseListener 的目的是什么?您的问题陈述看起来非常简单,但您的代码看起来非常复杂且不必要(除非我误解了您的问题)。请准确说明您要实现的目标。 -
真的很抱歉我没有包括这两个类。我只是错误地认为只有上面的代码是必要的。下次我会确保包括所有相关的类。我目前正在一步一步地做这个,所以包括我需要的东西。所以只有一个 JButton 实现了 ActionListener,因为我正在为此编写代码。我已经包含了 MouseListeners,因为我还有更多的鼠标功能要包含但还没有实现。
-
为了将来参考,请浏览tour 并查看help center 部分以及how to ask good questions 部分。另请查看minimal reproducible example 部分,了解我们真正需要哪些代码,以及我们不需要哪些代码。这将使人们更容易理解您的问题并为您提供帮助。
标签: java swing jframe jpanel jbutton