问题
我有这个JavaJFrame
class,其中我想使用boxlayout,但是我得到一个错误说6java.awt.AWTError: BoxLayout can't be shared
。我见过其他人有这个问题,但他们通过在contentpane上创建boxlayout来解决它,但这就是我在这里所做的。这是我的代码:
class edit_dialog extends javax.swing.JFrame{
javax.swing.JTextField title = new javax.swing.JTextField();
public edit_dialog(){
setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
setTitle("New entity");
getContentPane().setLayout(
new javax.swing.BoxLayout(this, javax.swing.BoxLayout.PAGE_AXIS));
add(title);
pack();
setVisible(true);
}
}
#1 热门回答(159 赞)
你的问题是你正在为aJFrame
(this
)创建aBoxLayout
,但将其设置为aJPanel
(getContentPane()
)的布局。尝试:
getContentPane().setLayout(
new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);
#2 热门回答(65 赞)
我也发现这个错误:
JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
将JPanel传递给BoxLayout时,JPanel尚未初始化。所以这样分开这一行:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
这会奏效。
#3 热门回答(13 赞)
我认为从前面的答案强调的一件重要事情是BoxLayout的目标(第一个参数)应该与调用setLayout方法的Container相同,如下例所示:
JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));