向initComponents添加参数的其他方法[java-netbeans]

时间:2016-03-19 16:27:53

标签: java swing netbeans jframe parameter-passing

我的netbeans中的GUI java项目存在很大问题。 众所周知,netbeans编译的代码是只读的,除了调用与initComponents相同的myInitComponents方法并在构造函数中调用它之外,我还需要另一种方法向initComponents方法添加参数。 现在我有了这个:

public class MainFrame {

    public MainFrame() {
       DefaultStyledDocument doc = new DefaultStyledDocument();
       myInitComponents(doc);
    }

    myInitComponents (DefaultStyledDocument doc) {
       //components
       textModel = new javax.swing.JTextPane(doc);
       //components
    }

    initComponents () {
      //components
    }

通过这种方式它可以工作,但每次我在框架内更改某些内容时,我都必须复制并填充myInitComponent中initComponents的所有新代码。 而且,这是一种非常糟糕的方式。 有没有其他方法来添加该参数? 任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:4)

您可以向MainFrame构造函数添加参数,将其放在字段中,在GUI构建器的属性表中使用自定义创建代码。

在initComponents的代码中插入了几个免费的代码位置。创建自定义代码就是这样一个地方;

private final DefaultStyledDocument doc = new DefaultStyledDocument();

在“自定义创建代码:”

new JTextPane(doc)

也可以用于自定义面板等。

答案 1 :(得分:2)

  

我的netbeans中的GUI java项目存在很大问题。众所周知,netbeans编译的代码是只读的,除了调用myInitComponents方法,与initComponents相同,并在构造函数中调用它之外,还需要另一种方法向initComponents方法添加参数

我认为您可能会在使用构造函数进行初始化以及 setters 进行访问时感到困惑。

这就像问:如果你有一个类,如a,b和amp; c,如何创建一个设置所有属性的setter。这是你应该避免的。您可以为每个属性创建单独的setter和getter,而不是尝试使用init来设置 所有 属性。

你应该这样做:

class MyClass
{
    private int a;
    private int b;
    private int c;

    public MyClass(){
        init();
    }

    private void init(){
        a = 100;
        b = 200;
        c = 300;
    }

    public int getA(){return a;}  
    public int getB(){return b;}
    public int getC(){return c;}

    public void setA(int a){this.a = a;}
    public void setB(int b){this.a = b;}
    public void setC(int c){this.a = c;}
}

而不是:

class MyClass
{
    private int a;
    private int b;
    private int c;

    public MyClass(){
        init();
    }

    private void init(){
        a = 100;
        b = 200;
        c = 300;
    }

    public void myInit(int a, int b, int c){
        this.a = a;
        this.b = b;
        this.c = c;
    }
}
  

这是一种非常糟糕的方式。有没有其他方法可以添加该参数?

所以你问,如果你还有一个属性,请说int d。我应该如何将其添加到myInit()的参数列表中。所以你已经开始在课堂设计中看到这种方法的问题。

如果可能,我们会尝试在设计中实现 低耦合 高内聚 。当您在单个方法中转储各种不相关的属性时,您将转向低内聚(一种不执行非常特定任务的方法)。

如果您尝试使用myInit()这样的单一方法并将其用作设置多个字段的设置器,则可能会导致许多问题。

  • 如果用户只想设置特定属性,而不是其他属性怎么办?

因此,要回答您的问题,请为每个属性使用单独的setter,除非这些属性密切相关,例如:

setLocation(int x, int y);
setBounds(int x, int y, int width, int height);

答案 2 :(得分:0)

最后我以一种非常简单的方式解决了这个问题。我在 initComponents()方法中插入 DefaultStyleDocument 所需的所有代码,方法是单击自定义代码并将其添加为预先创建代码。

public class MainFrame {

    public MainFrame() {

       myInitComponents();
    }

  //delete the myInitComponents() method

    initComponents () {
   //code useful for the DefaultStyledDocument..
    DefaultStyledDocument doc = new DefaultStyledDocument();
      //components
      textModel = new javax.swing.JTextPane(doc);
    }

希望这对某些人有用。