如何在一帧中添加绘图(绘制方法)和另一个带控件的面板?

时间:2016-02-24 14:42:47

标签: java swing

我需要JFrame,其中上半部分是paint()制作的绘图,下半部分是由JLabelJTextField和{{1}组成的面板} components。

这可能吗?我该怎么做?

3 个答案:

答案 0 :(得分:2)

  

我需要一个Jframe,其中上部是由paint()制作的绘图,下部是由JLabel,JTextField和JButtons组成的面板。

您想要做的事情没有冲突。你可以有一个带有2个子面板的主JPanel。一个在顶部用于您的绘图,另一个在底部用于包含您的JComponents,例如JButtons:

enter image description here

代码中的结构可能如下所示:

[root@xxx src]# pip install pyzmq  --upgrade
Requirement already up-to-date: pyzmq in /usr/local/lib64/python2.7/site-packages
[root@xxx src]# pip install msgpack-python 
Requirement already up-to-date: msgpack-python in /usr/local/lib64/python2.7/site-packages

您可以按照以下方式设置自定义JPanel(这是可选的):

class MainPanel extends JPanel{
    private DrawingSpace drawingSpace;  //Customized JPanel for drawing
    private JPanel subPanel;

    public MainPanel(){
        setPreferredSize(new Dimension(400, 400));
        initComponents();
    }

    private void initComponents(){
        drawingSpace = new DrawingSpace();
        subPanel = new JPanel();
    }
}

class DrawingSpace extends JPanel { public DrawingSpace(){ //Set size..etc } @Override public void paintComponent(Graphics g){ super.paintComponent(g); //perform your drawings here.. } } 的实施后,您只需向JPanels添加MainPanel的实例:

JFrame

答案 1 :(得分:1)

用户3437460(使用JPanel作为上半部分,并覆盖JPanel中的绘画方法)建议的解决方案是解决此问题的首选方法。

然而,当您要求直接绘制上部的解决方案时(不建议,但有解决方案):

  • 问题的一个(令人讨厌的)解决方法是覆盖JFrame的必要绘制方法,绘制上部,将图形上下文翻译大约100个像素,并调用继承的绘制方法绘制底部部分。 (请注意,您将遇到布局管理器问题,因为布局管理器无法看到上部的100px高度。但是,如果您使用绝对布局,它可以工作.Hacks,黑客黑客:(

  • 另一个超级黑客实际上是让下半部分足够大(如果你使用绝对布局,将你的下半部分定位在y = 100px)。然后添加您自己的GlassPane并渲染glassPane上部(或任何位置)的内容。

  • 当然,您可以创建一个专用的布局管理器,使前100个px部分为空。使用该布局管理器,然后在顶部获得一些空白区域,您可以使用它。

我认为现在你可以同意问题是"如何将自定义绘制的组件放在窗口的顶部" ,这是通过自定义绘制来解决的JPanel在窗口的顶部。保持简单!和平!

ps:覆盖paintComponent()而不是JPanel的paint()。见http://www.oracle.com/technetwork/java/painting-140037.html

的底部

答案 2 :(得分:0)

对于绘画部分,创建一个JPanel(或其他可绘制的组件)并覆盖paint方法。使用第二个JPanel并将所有其他组件放在其中。

从那里,查看如何在https://docs.oracle.com/javase/tutorial/uiswing/layout/using.html#set

进行布局管理

最简单的方法是使用GridLayout,上半部分为彩绘面板,下半部分为组件面板。