最近,我遇到了一个问题,即函数中没有调用 paintComponent 函数,我发现当我使用 splitpane 函数时,它会禁用绘制功能,并给出错误:
无法添加到布局:未知约束: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)
时,它会弹出上面提到的错误。
答案 0 :(得分:0)
您的UI程序集没有意义。您正在致电' setContentPane'到splitpane,这是好的(但很不寻常),但是你在框架上调用add(),然后尝试向contentPane(JSplitPane)添加其他内容。您应该在将splitPane添加到JPanel之前将JTabbedPane添加到SplitPane,或者以不同方式设置布局。
//These don't make sense together.
frame.setContentPane(splitPane);
frame.add(jTabbedpane);
关于绘制蓝线的第二个问题更复杂。
您正在做一堆疯狂的事情 - 您正在创建NewPanel
并尝试将其添加到JFrame
,但之后您正在设置JFrame的contentPane以后到另一个组件。您需要完成Swing教程并更好地布局您的UI。
答案 1 :(得分:0)
我认为可能无法以正确的方式添加绘画功能,
public void paintComponent(Graphics g){
super.paint(g);
您排在首位paintComponent(...)
,为什么要拨打super.paint(...)
?
首先阅读Swing基础知识的Swing Tutorial。本教程中的所有部分都有可下载和测试的工作示例。
所以你可以从:
开始