我需要JFrame
,其中上半部分是paint()制作的绘图,下半部分是由JLabel
,JTextField
和{{1}组成的面板} components。
这可能吗?我该怎么做?
答案 0 :(得分:2)
我需要一个Jframe,其中上部是由paint()制作的绘图,下部是由JLabel,JTextField和JButtons组成的面板。
您想要做的事情没有冲突。你可以有一个带有2个子面板的主JPanel。一个在顶部用于您的绘图,另一个在底部用于包含您的JComponents,例如JButtons:
代码中的结构可能如下所示:
[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,上半部分为彩绘面板,下半部分为组件面板。