【发布时间】:2014-10-30 23:55:40
【问题描述】:
我想编写一个程序,检查选择了哪个 RadioButton(圆形、实心圆形或矩形)。然后用户单击画布字段上的某处。它应该识别用户单击的坐标,然后在该位置绘制任何被选为单选按钮的内容。
遗憾的是它没有这样做。事实上,我的代码甚至没有到达“ActionListener”。我已经检查了 5 次代码并进行了一些测试,但仍然无法弄清楚。
希望你能帮忙
public class Optionen extends JFrame {
MeinCanvas drawspace = new MeinCanvas();
ButtonGroup btngrp= new ButtonGroup();
int xpos, ypos;
public Optionen(String titel) {
super(titel);
setLayout(new FlowLayout());
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1,20,20));
JRadioButton opt1 = new JRadioButton();
JRadioButton opt2 = new JRadioButton();
JRadioButton opt3 = new JRadioButton();
opt1.setActionCommand("Kreis"); //circle
opt1.setActionCommand("Scheibe"); // filled circle
opt1.setActionCommand("Rechteck"); //rectangle
opt1.setText("Kreis");
opt2.setText("Scheibe");
opt3.setText("Rechteck");
btngrp.add(opt1);
btngrp.add(opt2);
btngrp.add(opt3);
panel.add(opt1);
panel.add(opt2);
panel.add(opt3);
add(drawspace);
add(panel);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Optionen fenster = new Optionen("Optionswindow");
fenster.pack();
fenster.setSize(450,500);
fenster.setResizable(true);
fenster.setVisible(true);
}
class MeinCanvas extends Canvas {
class MeinMausAdapter extends MouseAdapter {
public void mousPressed(MouseEvent e) {
xpos = e.getX();
ypos = e.getY();
JOptionPane.showInputDialog(this);
repaint();
}
}
public MeinCanvas() {
addMouseListener(new MeinMausAdapter());
setBackground(Color.black);
setForeground(Color.orange);
}
public void paint(Graphics g) {
ButtonModel btnmdl= m_formauswahl.getSelection();
String label = btnmdl.getActionCommand();
int w = (int) (Math.random()*300);
int h = (int) (Math.random()*300);
if (label.equals("Kreis"))
g.drawOval(xpos, ypos, w, w);
if (label.equals("Scheibe"))
g.fillOval(xpos, ypos, w, h);
if (label.equals("Rechteck"))
g.drawRect(xpos, ypos, w, h);
}
public Dimension getMinimumSize() {
return new Dimension(300,300);
}
public Dimension getPreferredSize() {
return getMinimumSize();
}
}
}
Eclipse 告诉我代码没问题,但是每当我运行程序时,它都会立即抛出异常。这是转储:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at kapitel10.Optionen$MeinCanvas.paint(Optionen.java:79)
at sun.awt.RepaintArea.paintComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
【问题讨论】:
标签: java canvas radio-button draw paint