我正在使用javax.swing
程序包编写2D绘图应用程序。这个想法是要创建一个DrawingApplicationFrame
(扩展Jframe
类),除了实例中嵌入的一个实例外,还实例化几个JButtton
,来更改绘画的状态。我使用实例并更改实例的和属性。但是,文本字段似乎不接受其中的值以及更改和值。如何解决错误以使文本字段传递值?JCheckBox
JTextFields
DrawingPanel
drawpanel
DrawingApplicationFrame
JTextField
LineWidthText
DashLengthText
Width
Length
drawpanel
drawpanel.Width
drawpanel.Length
这是文本字段LineWidthText
和的侦听器的创建DashLengthText
:
JTextField LineWidthText=new JTextField(2);
JTextField DashLengthText=new JTextField(2);
LineWidthText.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
drawpanel.Width=Float.parseFloat(LineWidthText.getText());
drawpanel.dashed=new BasicStroke(drawpanel.Width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{drawpanel.Length}, 10);
drawpanel.concrete=new BasicStroke(drawpanel.Width);
}
});
DashLengthText.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
drawpanel.Length=Float.parseFloat(DashLengthText.getText());
drawpanel.dashed=new BasicStroke(drawpanel.Width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{drawpanel.Length}, 10);
}
});
这是DrawPanel类的代码:
public class DrawPanel extends JPanel
{
Color ColorOne=Color.BLACK;
Color ColorTwo=Color.BLACK;
Boolean FilledOrNot=false, UseGradientOrNot=false, DashedOrNot=false, isDragged=false;
float Width=10;
float Length=10;
String ShapeChoice="Line";
ArrayList<MyShapes> ShapeObjects=new ArrayList<MyShapes>();
Paint gradient=new GradientPaint(100, 100, ColorOne, 100+Width*2, 100+Width*2, ColorTwo, true);
Paint mono=new GradientPaint(100, 100, ColorOne, 100+Width*2, 100+Width*2, ColorOne, true);
Stroke dashed=new BasicStroke(Width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{Length}, 10);
Stroke concrete=new BasicStroke(Width);
Point start=new Point();
Point stop=new Point();
Point drag=new Point();
JLabel label=new JLabel("(,)");
public DrawPanel(String caption)
{
this.setBackground(Color.WHITE);
this.setLayout(new BorderLayout());
this.add(label, BorderLayout.SOUTH);
this.label.setVisible(true);
}
@Override
@SuppressWarnings("empty-statement")
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
//loop through and draw each shape in the shapes arraylist
addMouseListener(new MouseHandler());
for(int i=0; i<ShapeObjects.size(); i++){
ShapeObjects.get(i).draw(g2d);
}
}
void removeLastElement(){
ShapeObjects.remove(ShapeObjects.size()-1);
repaint();
}
void clearAllElements(){
ShapeObjects.clear();
repaint();
}
public void addShape(MyShapes shape){
ShapeObjects.add(shape);
}
public class MouseHandler extends MouseAdapter implements MouseMotionListener
{
public void mousePressed(MouseEvent event)
{
DrawPanel dp=(DrawPanel) event.getSource();
dp.start=(new Point(event.getX(), event.getY()));
}
public void mouseReleased(MouseEvent event)
{
DrawPanel dp=(DrawPanel) event.getSource();
dp.stop=(new Point(event.getX(), event.getY()));
switch(ShapeChoice){
case "Line":
if(UseGradientOrNot&&DashedOrNot)
dp.addShape(new MyLine(dp.start, dp.stop, dp.gradient, dp.dashed));
else if((UseGradientOrNot==false)&&DashedOrNot)
dp.addShape(new MyLine(dp.start, dp.stop, dp.mono, dp.dashed));
else if(UseGradientOrNot&&(DashedOrNot==false))
dp.addShape(new MyLine(dp.start, dp.stop, dp.gradient, dp.concrete));
else if((UseGradientOrNot==false)&&(DashedOrNot)==false)
dp.addShape(new MyLine(dp.start, dp.stop, dp.mono, dp.concrete));
break;
case "Oval":
if(UseGradientOrNot&&DashedOrNot)
dp.addShape(new MyOval(dp.start, dp.stop, dp.gradient, dp.dashed, dp.FilledOrNot));
else if((UseGradientOrNot==false)&&DashedOrNot)
dp.addShape(new MyOval(dp.start, dp.stop, dp.mono, dp.dashed, dp.FilledOrNot));
else if(UseGradientOrNot&&(DashedOrNot==false))
dp.addShape(new MyOval(dp.start, dp.stop, dp.gradient, dp.concrete, dp.FilledOrNot));
else if((UseGradientOrNot==false)&&(DashedOrNot)==false)
dp.addShape(new MyOval(dp.start, dp.stop, dp.mono, dp.concrete, dp.FilledOrNot));
break;
case "Rectangle":
if(UseGradientOrNot&&DashedOrNot)
dp.addShape(new MyRectangle(dp.start, dp.stop, dp.gradient, dp.dashed, dp.FilledOrNot));
else if((UseGradientOrNot==false)&&DashedOrNot)
dp.addShape(new MyRectangle(dp.start, dp.stop, dp.mono, dp.dashed, dp.FilledOrNot));
else if(UseGradientOrNot&&(DashedOrNot==false))
dp.addShape(new MyRectangle(dp.start, dp.stop, dp.gradient, dp.concrete, dp.FilledOrNot));
else if((UseGradientOrNot==false)&&(DashedOrNot)==false)
dp.addShape(new MyRectangle(dp.start, dp.stop, dp.mono, dp.concrete, dp.FilledOrNot));
break;
}
repaint();
}
}
}
由我自己解决。有两种方法:一种是从按钮上的文本字段分配值检索任务。另一个只需按“ Enter”键!事实证明,该代码可以正常工作。仅当在没有任何进一步操作的情况下将值简单地输入到文本字段中时,它才起作用!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句