我将GUI程序分解为可管理的类。 想知道为什么下面的示例代码在我扩展JPanel时有效,但在构造函数中创建JPanel对象时没有。 有人能解释一下吗? 此作品 - >
public class SomePanel extends JPanel{
private JScrollPane scroll;
private JTextArea text;
public SomePanel() {
// TextArea
text = new JTextArea(10,50);
text.setBackground(Color.black);
// JScrollPane
scroll = new JScrollPane(text);
scroll.getHorizontalScrollBar().setEnabled(false);
scroll.setWheelScrollingEnabled(false);
add(scroll);
}
这不起作用 - >
public class SomePanel{
private JScrollPane scroll;
private JTextArea text;
private JPanel panel;
public SomePanel() {
panel = new JPanel();
text = new JTextArea(10,50);
text.setBackground(Color.black);
// JScrollPane
scroll = new JScrollPane(text);
scroll.getHorizontalScrollBar().setEnabled(false);
scroll.setWheelScrollingEnabled(false);
panel.add(scroll);
}
添加到框架等..
public class Frame {
SomePanel panel;
public Frame(){
*/*
* Construct frame etc
*/*
frame.add(panel = new SomePanel());
}
}
答案 0 :(得分:2)
这是因为在第二种情况下,SomePanel不是从Component扩展的类,因此无法将其添加到Container(例如JFrame的contentPane)中。要解决此问题,请为类提供一个方法,允许其他类提取其包含的JPanel:
public JComponent getPanel() {
return panel;
}
并将其添加到您的JFrame:
frame.add(new SomePanel().getPanel());