Какой конструктор выполнение придерживается передовой практики в Java


Я ищу лучшие практики они применяются для использования конструктора общего построения классов Java.

Пример 1

import javax.swing.*;
import java.awt.*;

public class Painter extends JPanel{

  public Painter(){
     buildGUI();
  }

  private void buildGUI(){
    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.setTitle("Paint drawing demonstration");
    new Center_frame(frame);

    JPanel headerPanel = new JPanel();
    headerPanel.add(new JLabel("The drawing panel is below"));

    Drawing_panel dp = new Drawing_panel();

    frame.add(BorderLayout.NORTH,headerPanel);
    frame.add(BorderLayout.SOUTH,dp);

    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String args[]){
      new Painter();
  }

}//end class Painter

Пример 2

import javax.swing.*;
import java.awt.*;

public class Painter extends JPanel{

  public Painter(){
       JFrame frame = new JFrame();
       frame.setLayout(new BorderLayout());
       frame.setTitle("Paint drawing demonstration");
       new Center_frame(frame);

       JPanel headerPanel = new JPanel();
       headerPanel.add(new JLabel("The drawing panel is below"));

       Drawing_panel dp = new Drawing_panel();

       frame.add(BorderLayout.NORTH,headerPanel);
       frame.add(BorderLayout.SOUTH,dp);

       frame.pack();
       frame.setVisible(true);
  }

public static void main(String args[]){
    //create a Painter object
    new Painter();
}

}//end class Painter


1714
6
задан 15 сентября 2011 в 04:09 Источник Поделиться
Комментарии
2 ответа

никто из них, это должно быть стандартной или базовой

Редактирования: добавил DefaultCloseOperation для верхнего уровня контейнера

import javax.swing.*;
import java.awt.*;

public class Painter {

private JFrame frame;
private JPanel headerPanel;
private Drawing_panel ;

public Painter() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setTitle("Paint drawing demonstration");

//new Center_frame(frame);
//no reason for create another new JFrame look for
//JDialog instead of JFrame, if you needed multiplayed
//view then check CardLayout, is very easy for use

headerPanel = new JPanel();
headerPanel.add(new JLabel("The drawing panel is below"));

dp = new Drawing_panel();

frame.add(headerPanel, BorderLayout.NORTH);
frame.add(dp, BorderLayout.SOUTH);

frame.pack();
frame.setVisible(true);
}

public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
Painter p = new Painter();
}
});
}
}

4
ответ дан 17 сентября 2011 в 02:09 Источник Поделиться

Какова цель вашего художника класса ? Вы просто используя его конструктор, чтобы выполнить некоторый код, который совершенно не связан с художником сам. Вы делаете то же самое с двумя другими объектами, вы instanciate : Center_frame и Drawing_panel.

При написании графического интерфейса в Swing, вы вообще писать классы, которые расширяют для jpanel, и конструкторы содержит код для инициализации внутренних компонентов. Это плохая идея, чтобы позволить конструктору иметь побочный эффект (отображение кадра), как у вас.

Кроме того, постарайтесь следовать именование Java конвенций : переменные и типы имен использовать верблюда случае, и переменных начинаются со строчной.

При инициализации формы JFrame, вы могли бы быть заинтересованы в вызове метода setDefaultCloseOperation (обычно с форму.EXIT_ON_CLOSE или форму.DISPOSE_ON_CLOSE)

2
ответ дан 18 сентября 2011 в 07:09 Источник Поделиться