首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java swing中的分割面板中绘制

如何在Java swing中的分割面板中绘制
EN

Stack Overflow用户
提问于 2017-05-12 15:39:50
回答 2查看 239关注 0票数 0

最近,我遇到了一个问题,即函数中没有调用paintComponent函数,我发现当我使用拆分窗格函数时,它将禁用paint函数,并给出错误:

无法添加到布局:未知约束: null

我认为油漆函数可能没有按正确的方式添加,下面是我的代码(部分):

班级:考试

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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)时,它会弹出上面提到的错误。

EN

回答 2

Stack Overflow用户

发布于 2017-05-12 16:00:34

您的UI程序集没有意义。您在拆分窗格中调用'setContentPane‘,这是一个排序-- OK (但很不寻常),然后调用add()到框架中,然后尝试向contentPane ( JSplitPane)添加其他内容。您应该在将JTabbedPane添加到SplitPane之前将splitPane添加到JPanel,或者以不同的方式设置布局。

代码语言:javascript
运行
复制
//These don't make sense together.
frame.setContentPane(splitPane);
frame.add(jTabbedpane);

关于划定蓝线的第二个问题要复杂得多。您正在做一堆疯狂的事情--您正在创建一个NewPanel并试图将它添加到JFrame中,但是之后您将JFrame的contentPane设置为一个不同的组件。您需要阅读Swing教程,并更好地布局您的UI。

票数 0
EN

Stack Overflow用户

发布于 2017-05-12 19:11:04

我认为油漆的功能可能没有被添加到正确的方式,

代码语言:javascript
运行
复制
 public void paintComponent(Graphics g){
    super.paint(g);

您正在重写paintComponent(...),那么为什么要调用super.paint(...)

首先阅读Swing教程中的Swing基础知识。本教程中的所有章节都有您可以下载和测试的工作示例。

所以你可以从以下几个方面开始:

  1. 如何使用拆分窗格-它将向您展示如何向框架中添加拆分窗格。
  2. 执行自定义绘画-它将解释绘画是如何工作的,并展示如何覆盖paintComponent(.)方法。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43941625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档