gpt4 book ai didi

java - Swing 与继承

转载 作者:行者123 更新时间:2023-12-01 05:51:19 24 4
gpt4 key购买 nike

我有两个类,一个类扩展另一个类。在它们两个中,我都有代表 Swing 组件的字段。问题是,当我尝试使用子类中的组件时,出现了问题 - 似乎 Swing 线程无法访问子组件。我做错了什么?

public abstract class AppViewBase {
protected JPanel jContentPane = null;

protected void initialize() {
//...
addOutputControlls(jContentPane);
//...
}
protected abstract void addOutputControlls(JPanel jContentPane) ;
}

public class Titrai extends AppViewBase {
public JTextPane line1 = null;
public JTextPane line2 = null;

protected void addOutputControlls(JPanel jContentPane2) {
jContentPane2.add(getJTextPane());
jContentPane2.add(getJTextPane2());
}

public void setCurrentLine(Object selectedValue) {
String s = (String) selectedValue;
getJTextPane().setText(s);
getJTextPane2().setText("");

getJTextPane().repaint();
//only gets repainted i i move line1, line2 fields to parent class
getJTextPane2().repaint();
}

}
<小时/>

编辑 - 评论中的代码

if(EventQueue.isDispatchThread()) { 
initialize();
} else {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
initialize();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
<小时/>

编辑 2 - OP 其他评论中的代码

  JTextPane getJTextPane() {
if (line1 == null) {
line1 = new JTextPane();
line1.setFont(new Font("Tahoma", Font.PLAIN, 13));
line1.setForeground(Color.white);
line1.setPreferredSize(new Dimension(385, 16));
line1.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, false);
line1.setEditorKit(getDefaultLineEditorKit());
line1.setEditable(false);
line1.setLocation(new Point(15, 15));
line1.setSize(new Dimension(385, 16));
line1.setBackground(Color.black);
line1.setFocusable(false);
line1.setBorder(null);
}
return line1;
}

最佳答案

Emm...正如我所见,您没有将此字段初始化为

protected JPanel jContentPane = null;

我想你应该将字段代码修改为

protected JPanel jContentPane = new JPanel();

...因为 null 不是“准备使用”的对象值:)

我的意思是这个方法...

protected void initialize() {
//...
addOutputControlls(jContentPane);//<-- contain null
//...
}

...似乎适用于空面板,因此初始化未正确完成。

祝你好运:)

关于java - Swing 与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com