最近,我遇到了一个问题,即函数中没有调用paintComponent函数,我发现当我使用拆分窗格函数时,它将禁用paint函数,并给出错误:
无法添加到布局:未知约束: null
我认为油漆函数可能没有按正确的方式添加,下面是我的代码(部分):
班级:考试
public class Test extends JFrame{
public Test() throws IOException{
//JFrame jf = new JFrame("my frame");
this.add(new NewPanel(this));
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
this.setBounds(300,200,1050,600);
this.setVisible (true);
}
public static void main (String[] args) throws IOException{
Test test = new Test ();
test.setTitle("Hello");
//frame.pack ();
}
}
班级: NewPanel
public class NewPanel extends JPanel{
public NewPanel(JFrame frame) throws IOException{
JTabbedPane jTabbedpane = new JTabbedPane();
JSplitPane splitPane = new JSplitPane();
JPanel p1 = new JPanel();
p1.setLayout(null);
p2.setLayout(new FlowLayout());
splitPane.setOneTouchExpandable(true);
splitPane.setContinuousLayout(true);
//splitPane.setPreferredSize(new Dimension (250,500));
splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
splitPane.setLeftComponent(p1);
splitPane.setRightComponent (p2);
splitPane.setDividerSize(3);
splitPane.setDividerLocation(250); //balance two panels width
jTabbedpane.addTab("ABC",p2);
jTabbedpane.addTab("AB",p3);
jTabbedpane.addTab("AC",p4);
jTabbedpane.addTab("BC",p5);
frame.setContentPane(splitPane);
frame.add(jTabbedpane);
}
}
public void paintComponent(Graphics g){
super.paint(g);
g.setColor(Color.BLUE);
g.drawLine(303, 90, 303, 200);
g.drawLine(583, 90, 583, 200);
g.drawLine(863, 90, 863, 200);
}
}
当我评论frame.add(jTabbedpane)
时,这条线可以在面板中绘制,但是它只能在一个面板中可用,我不能把它画成另一个拆分面板,我不知道为什么。当我取消注释frame.add(jTabbedpane)
时,它会弹出上面提到的错误。
发布于 2017-05-12 16:00:34
您的UI程序集没有意义。您在拆分窗格中调用'setContentPane‘,这是一个排序-- OK (但很不寻常),然后调用add()到框架中,然后尝试向contentPane ( JSplitPane)添加其他内容。您应该在将JTabbedPane添加到SplitPane之前将splitPane添加到JPanel,或者以不同的方式设置布局。
//These don't make sense together.
frame.setContentPane(splitPane);
frame.add(jTabbedpane);
关于划定蓝线的第二个问题要复杂得多。您正在做一堆疯狂的事情--您正在创建一个NewPanel
并试图将它添加到JFrame
中,但是之后您将JFrame的contentPane设置为一个不同的组件。您需要阅读Swing教程,并更好地布局您的UI。
发布于 2017-05-12 19:11:04
我认为油漆的功能可能没有被添加到正确的方式,
public void paintComponent(Graphics g){
super.paint(g);
您正在重写paintComponent(...)
,那么为什么要调用super.paint(...)
?
首先阅读Swing教程中的Swing基础知识。本教程中的所有章节都有您可以下载和测试的工作示例。
所以你可以从以下几个方面开始:
https://stackoverflow.com/questions/43941625
复制相似问题