我的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的所有新代码。 而且,这是一种非常糟糕的方式。 有没有其他方法来添加该参数? 任何帮助表示赞赏!
答案 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);
}
希望这对某些人有用。