gpt4 book ai didi

Java,听众建议,swing comp's

转载 作者:行者123 更新时间:2023-11-29 10:04:36 28 4
gpt4 key购买 nike

感谢您帮我看这个,这是我的问题:

我的 MyFrame 类中的 If 语句说“MyShape 是抽象的,无法实例化”我也不知道如何完成我的 actionlistener,以便它创建一个我从 jmenu 选择的形状的实例。最后将我的 Jslider 的尺寸设置为我的 square 的大小和面积,并将其添加到 JtextField。

  1. 如何修复错误“MyShape 是抽象的,无法实例化”?
  2. 关于如何完成我的 if 语句以便将我选择的形状链接到我的 Jslider 以便将其值添加到该形状(即方形或圆形类)的任何提示?
  3. 然后我如何将 2 个方法用于查找该类的长度和面积,即方形或圆形到 2 个 Jtext 字段?

我很乐意提供任何帮助,如果你能解释我需要做的事情,这是一种简单的方法,让像我这样的编程新手能够理解 :)


我的框架


    package assignment;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;


public class MyFrame extends javax.swing.JFrame {


public MyFrame() {


// Create the menu
JMenuBar topMenu = new JMenuBar();
this.setJMenuBar(topMenu);

//create the menu button "shapes"
JMenu shapes = new JMenu("Shapes");
topMenu.add(shapes);
//Create the 3 shapes for the menu
JMenuItem square = new JMenuItem("Square");

JMenuItem circle = new JMenuItem("Circle");
JMenuItem triangle = new JMenuItem("Triangle");

//add shapes to menu
shapes.add(circle);
shapes.add(triangle);
shapes.add(square);

//add the menu
setJMenuBar(topMenu);


MyControlPanel pane = new MyControlPanel();
this.add(pane);
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);

pack();
}// </editor-fold>

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MyFrame().setVisible(true);
}
});

class squareAction implements ActionListener {

public void actionPerformed(ActionEvent e) {

JMenuItem clickedMenu = (JMenuItem) e.getSource();
if (clickedMenu.getText().equals("Square")) {
MyShape ASquare = new MyShape() {
};
} else if (clickedMenu.getText().equals("Circle")) {
MyShape Circle = new MyShape();
} else if (clickedMenu.getText().equals("Triangle")) {
MyShape Triangle = new MyShape();
}
}
}
}
}

Jpanel - 我的控制面板

    package assignment;

//import java.awt.FlowLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MyControlPanel extends javax.swing.JPanel {

JSlider slider;
JLabel sliderLabel;
JLabel sliderdimension;
JLabel blank;
JLabel dl;
JLabel area1;

/**
* Creates new form MyControlPanel
*/
public MyControlPanel() {


slider = new JSlider();
slider.setValue(50);
slider.addChangeListener(new MyChangeAction());
slider.setMajorTickSpacing(10);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setBounds(300, 50, 100, 50);

sliderLabel = new JLabel("50");
blank = new JLabel(" ");
sliderdimension = new JLabel("Shape Dimension:");

JTextField boundary_length = new JTextField("Boundary Length");
JTextField area = new JTextField("Area");

dl = new JLabel("Boundary Length =");
area1 = new JLabel("Area =");

setLayout(new BorderLayout());


JPanel sliderPanel = new JPanel();
sliderPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0));


sliderPanel.add(sliderdimension);
sliderPanel.add(sliderLabel);
sliderPanel.add(slider);
sliderPanel.add(dl);
sliderPanel.add(boundary_length);
sliderPanel.add(area1);
sliderPanel.add(area);
this.add(sliderPanel, BorderLayout.PAGE_END);



}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
// Variables declaration - do not modify
// End of variables declaration

public class MyChangeAction implements ChangeListener {

//complete code here
public void stateChanged(ChangeEvent ce) {
int value = slider.getValue();
String str = Integer.toString(value);
sliderLabel.setText(str);


}
} // end class
}

我的形状


    package assignment;

public abstract class MyShape
{

double thelength;
double thearea;



public abstract double computeBoundaryLength(double Length);

public abstract double computeArea (double Length);
}

正方形


    package assignment;

public class ASquare extends MyShape {

@Override
public double computeBoundaryLength(double Length)
{
thelength=(4*Length);
return thelength;
}

@Override
public double computeArea(double Length)
{
thearea=(Length*Length);
return thearea;
}

}

类 shapeAction 实现 ActionListener{ public void actionPerformed(ActionEvent e){

            JMenuItem clickedMenu = (JMenuItem)e.getSource();
if (clickedMenu.getText().equals("Square")){
//implement abstract methods
MyShape ASquare = new ASquare();
ASquare.addActionListener(new shapeAction());
}
else if (clickedMenu.getText().equals("Circle")){
//implement abstract methods
MyShape ACircle = new ACircle();
ACircle.addActionListener(new shapeAction());
}
else if (clickedMenu.getText().equals("Triangle")){
//implement abstract methods
MyShape ATriangle = new ATriangle();
ATriangle.addActionListener(new shapeAction());

最佳答案

  • 你的 squareAction 是用来监听所有可能的菜单选择的类(每种形状一个),所以它应该被命名为 ShapeMenuAction 或其他名字像那样。如果您希望在选择菜单选项时执行 ShapeMenuActionactionPerformed,您必须创建它的一个实例并将其添加到每个 MenuItem 对它们使用 addActionListener 方法。否则,什么也不会发生。

在 MyFrame 中:

JMenuItem square = new JMenuItem("Square");
square.addActionListener(new ShapeAction());
JMenuItem circle = new JMenuItem("Circle");
circle.addActionListener(new ShapeAction());
JMenuItem triangle = new JMenuItem("Triangle");
triangle.addActionListener(new ShapeAction());
  • 在您的actionPerformed 中,您必须实例化MyShape 的具体子类。现在你除了实例化一个形状什么都不做,你必须在方法结束之前对对象做一些事情,对吧?在您的 MyControlPanel 中创建一个 setShape 方法,并从 actionPerformed 调用它,将新创建的形状传递给它。

在 ShapeAction 中:

    public void actionPerformed(ActionEvent e) {
JMenuItem clickedMenu = (JMenuItem) e.getSource();
if (clickedMenu.getText().equals("Square")) {
MyShape aSquare = new ASquare();
myControlPanel.setShape(aSquare);
} else if (clickedMenu.getText().equals("Circle")) {
MyShape aCircle = new ACircle();
myControlPanel.setShape(aCircle);
} else if (clickedMenu.getText().equals("Triangle")) {
MyShape aTriangle = new MyShape();
myControlPanel.setShape(aTriangle);
}
}

您必须在 MyFrame 中创建一个名为 myControlPanel 的 MyControPanel:

private MyControlPanel myControlPanel

并添加它

myControlPanel = new MyControlPanel();
getContentPane().add(myControlPanel);

之前

pack();
  • MyControlPanel 中,您现在可以根据 slider 值和所选形状更新标签,每次其中一个发生变化时。

    私有(private) MyShape 形状;public void set Shape(MyShape shape) { this.shape = 形状; 更新标签();

关于Java,听众建议,swing comp's,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13016684/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com