JComponent不知道如何在没有重复代码的情况下创建面板

时间:2017-04-14 17:46:23

标签: java swing

我遇到创建面板的问题,这将允许我读/写文件。我的意思是我有一些类似书(有字段作者,页面,出版日期)和另一个扩展课本的漫画课。在这个课程中,我有3个另外的字段,也有书中的这个。现在我想创建一个面板来编辑类漫画中的对象,面板应该有两个类的字段,但我也不想在编写另一个同时扩展book的类时重复代码。

到目前为止我已经

 abstract public class book implements Serializable {
    String author;
    String publication_date;
    Integer pages;
public String toString(){
    return "";
}
public void edit(){};

} 这是我的类漫画,将通过jpanel编辑

 public class comics extends book implements Serializable {
 Integer number1;
 Integer number2;
 String name;

public Samochod(String author, String publication_date, int pages, 
     int number1, int number2, String name){
    this.author = author;
    this.publication_date = publication_date;
    this.pages = pages;
    this.number1 = number1;
    this.number2 = number2;
    this.name = name;

}

public String toString(){
    return author + publication_date + pages + number1 + number2 + name;
}

private JPanel createPanel(){
    return new editComics(this);
}
public void e(){
     new Frame(createPanel());
}

框架是容器

public class Frame extends JFrame implements Serializable {
public Frame(JPanel panel) {
    add(panel);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}
}

我想避免复制/粘贴代码,在每个类中重复代码,从代码类创建字段

public class editComics extends JPanel implements Serializable{
comics obiekt ;
private  JTextField author = new JTextField();
private  JTextField publication_date = new JTextField();
private  JTextField pages = new JTextField();
private  JTextField number1 = new JTextField();
private  JTextField number2 = new JTextField();
private  JTextField name = new JTextField();

public editComics(comics obiekt){
    super();
    this.obiekt = obiekt;
    setLayout(new BorderLayout());
    createPanels();
}

private void createPanels() {
    JPanel upperpanel = new JPanel();
    upperpane.setLayout(new GridLayout(3, 2)); 
    JButton save = new JButton("save");
    save.addActionListener(new ConvertListener());

    author.setText(obiekt.author);
    publication_date.setText(publication_date.marka);
    pages.setText(obiekt.pages.toString());
    number1.setText(obiekt.number1.toString());
    number2.setText(obiekt.number2.toString());
    name.setText(obiekt.name);

    upperpanel.add(author);
    upperpanel.add(new JLabel("author:"));
    upperpanel.add(publication_date);
    upperpanel.add(new JLabel("publication_date: "));
    upperpanel.add(pages);
    upperpanel.add(new JLabel("pages: "));
    upperpanel.add(number1);
    upperpanel.add(new JLabel("number1: "));
    upperpanel.add(number2);
    upperpanel.add(new JLabel("number2: "));
    upperpanel.add(name);
    upperpanel.add(new JLabel("name"));

    this.add(upperpanel, BorderLayout.CENTER);
    this.add(save, BorderLayout.SOUTH);
}

有人可以给我一个建议我怎么能这样做,因为所有时间重复代码都很糟糕但我不知道怎么做。

1 个答案:

答案 0 :(得分:0)

只是一个友好的建议你应该检查你的代码,除非你没有编译。

发现错误:

JPanel upperpane; = new JPanel();

应该是:

JPanel upperpane = new JPanel();