向initComponents[java netbeans]添加参数的其他方法
我在netbeans中的GUI java项目有一个很大的问题。 众所周知,netbeans编译的代码是只读的,除了调用与initComponents相同的myInitComponents方法并在构造函数中调用它之外,我还需要另一种方法向initComponents方法添加参数。 现在我有这个:向initComponents[java netbeans]添加参数的其他方法,java,swing,netbeans,jframe,parameter-passing,Java,Swing,Netbeans,Jframe,Parameter Passing,我在netbeans中的GUI java项目有一个很大的问题。 众所周知,netbeans编译的代码是只读的,除了调用与initComponents相同的myInitComponents方法并在构造函数中调用它之外,我还需要另一种方法向initComponents方法添加参数。 现在我有这个: public class MainFrame { public MainFrame() { DefaultStyledDocument doc = new DefaultStyle
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中复制和pase initComponents的所有新代码。
此外,这是一种非常糟糕的方式。
是否有其他方法添加该参数?
感谢您的帮助 您可以向大型机构造函数添加参数,将其放置在字段中,使用GUI生成器属性表中的自定义创建代码 在initComponents的代码中可以插入几个免费的代码位置。创建自定义代码就是这样一个地方
private final DefaultStyledDocument doc = new DefaultStyledDocument();
在“自定义创建代码”中:
也可用于定制面板等
我在netbeans中的GUI java项目有一个很大的问题。众所周知,netbeans编译的代码是只读的,除了调用与initComponents相同的myInitComponents方法并在构造函数中调用它之外,我还需要另一种方法向initComponents方法添加参数
我认为您可能会混淆使用构造函数进行初始化和使用设置器访问值
这无异于问:如果您有一个具有a、b和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;
}
}
而不是这个:
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;
}
}
这是一种非常糟糕的方式。是否有其他方法添加该参数
所以你问,如果你还有一个属性,比如intd
。如何将其添加到myInit()的参数列表中
。因此,您已经开始看到这种方法在类设计中存在的问题
如果可能,我们在设计中尝试实现低耦合和高内聚。当您在一个方法中转储各种不相关的属性时,您将转向低内聚性(一种不执行非常特定任务的方法)
如果尝试使用一个方法,如myInit()
,并将其用作设置多个字段的setter,则可能会导致许多问题
- 如果用户只想设置一个特定属性,而不想设置其他属性,该怎么办
因此,要回答您的问题,请为每个属性使用单独的setter,除非这些属性密切相关,例如:
setLocation(int x, int y);
setBounds(int x, int y, int width, int height);
最后我用一种非常简单的方法解决了这个问题。我在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);
}
希望这对其他人有用。您可以看看下面我的解决方案。