所以我有这个超类使用一些组件制作一个JPanel。现在我需要子类来制作一些radiobuttons并在buttonMin之前显示它们。现在是我的问题:如何在我需要它的超类中调用我的子类中的代码(请参阅代码以查看应该调用代码的位置)?
我的超类
public class RecordLine extends JPanel{
public RecordLine(Product product){
JTextField fieldName = new JTextField();
fieldName.setText(product.getName());
this.add(fieldName);
Component horizontalStrut = Box.createHorizontalStrut(20);
this.add(horizontalStrut);
//Subclass code should be executed here
Component horizontalStrut_1 = Box.createHorizontalStrut(20);
this.add(horizontalStrut_1);
JButton buttonMin = new JButton("-");
this.add(buttonMin);
}
}
我的子类
public class RecordLineDrinks extends RecordLine {
public RecordLineDrinks(Product product) {
super(product);
JRadioButton rdbtnFles = new JRadioButton("Fles");
this.add(rdbtnFles);
}
}
答案 0 :(得分:0)
你不能直接...你可以让你的超类抽象,然后实现一个你在构造函数中间调用的方法
public abstract class RecordLine extends JPanel{
abstract void midwayUpdate();
然后
public class RecordLineDrinks extends RecordLine {
public RecordLineDrinks(Product product) {
super(product);
}
void midwayUpdate() {
JRadioButton rdbtnFles = new JRadioButton("Fles");
this.add(rdbtnFles);
}
}
答案 1 :(得分:0)
你有一个“模板方法”。
在超类中定义(但不一定在那里做任何事情)并从超类'方法调用。
在子类中,您可以覆盖该方法来执行操作。
//Subclass code should be executed here
this.addExtraButtons();
如果在构造函数中执行此操作,则必须要小心,因为它将在实例完全初始化之前调用。将所有这些代码移动到其他setup()
方法中可能更干净。
答案 2 :(得分:0)
您可能需要更改类结构,提供一种可用于创建UI的方法(即createView
),从中可以通过getter访问其他组件
这样,您可以更改createView
的工作方式。
问题在于,您将负责完全重新创建子类中的UI,因此您将需要其他UI组件的getter方法。
另一个选择是,如果您知道要添加新组件的位置,则可以提供无效的方法的默认实现,但允许子类修改
public class RecordLine extends JPanel{
public RecordLine(Product product){
JTextField fieldName = new JTextField();
fieldName.setText(product.getName());
this.add(fieldName);
Component horizontalStrut = Box.createHorizontalStrut(20);
this.add(horizontalStrut);
//Subclass code should be executed here
Component horizontalStrut_1 = Box.createHorizontalStrut(20);
this.add(horizontalStrut_1);
addBeforeMinButton();
JButton buttonMin = new JButton("-");
this.add(buttonMin);
}
protected void addBeforeMinButton() {
}
}
但这通常意味着您事先知道如何修改UI