佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1550|回复: 12

一些java的疑问

[复制链接]
发表于 29-1-2010 10:52 PM | 显示全部楼层 |阅读模式
本帖最后由 1max1 于 12-2-2010 09:50 PM 编辑

为何两个都一样是800X600却得到不同的广度?



1:
import javax.swing.*;

import java.awt.*;

public class Test extends JFrame
{   public JPanel GUI()
    {   JPanel p=new JPanel();
        p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
      
        return p;
    }

    public Test()
    {   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(800,600));
        setContentPane(GUI());

        pack();
        setVisible(true);
    }

    public static void main(String[] args)
    {   new Test();
    }

}


2:
import javax.swing.*;

import java.awt.*;

public class Test extends JFrame
{   public JPanel GUI()
    {   JPanel p=new JPanel();
        p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
        p.setPreferredSize(new Dimension(800,600));
        
        return p;
    }

    public Test()
    {   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(GUI());

        pack();
        setVisible(true);
    }

    public static void main(String[] args)
    {   new Test();
    }

}


PS:正确的800X600是第一个。

请问setContentPane()add()有何不同?

特别感谢:jasonmun
回复

使用道具 举报


ADVERTISEMENT

发表于 30-1-2010 07:15 PM | 显示全部楼层
本帖最后由 jasonmun 于 30-1-2010 07:17 PM 编辑

一个class里面拥有static method, 那表示说这个 method 是这个class 所拥有..
在未 create object 之前, static method 已经存在..
无论你用这个class create 多少个 objects, 这些 objects 会共同share 这个 method..
(class level 的 method, 而不是 object level 所拥有的 method)

而 static method 里只可以store static 的属性, 不可以store object 的属性..
回复

使用道具 举报

发表于 30-1-2010 07:32 PM | 显示全部楼层
http://860830wlx.blog.51cto.com/327727/79316

  关于setContentPane()和getContentPane()的应用
我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常——不信就试试。造成这个现象的原因只有一个解释:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?
  JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
  对JFrame添加组件有两种方式:
  1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
  2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
    JpanelcontentPane=newJpanel();
    ……//把其它组件添加到Jpanel中;
    frame.setContentPane(contentPane);
    //把contentPane对象设置成为frame的内容面板

我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常——不信就试试。造成这个现象的原因只有一个解释:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?
  JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
  对JFrame添加组件有两种方式:
  1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
  2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
    JpanelcontentPane=newJpanel();
    ……//把其它组件添加到Jpanel中;
    frame.setContentPane(contentPane);
    //把contentPane对象设置成为frame的内容面板
回复

使用道具 举报

发表于 30-1-2010 07:35 PM | 显示全部楼层
很基础的问题, 如果你有打算成为programmer,
首先, 你要学会应用 google..
回复

使用道具 举报

 楼主| 发表于 30-1-2010 08:53 PM | 显示全部楼层
本帖最后由 1max1 于 30-1-2010 08:58 PM 编辑

回复 4# jasonmun
谢谢给于解释。
其实我有上网找过,但英文能力有限,所以不怎么了解。

而 static method 里只可以store static 的属性, 不可以store object 的属性..

看了只有把object变成static了。。。
回复

使用道具 举报

发表于 30-1-2010 09:38 PM | 显示全部楼层
英文看不懂, 可以看中文的..
中文的资料也不会少于英文的..

而我呢, 英文也不觉得会比别人强, 但我中英文的资料我也看..
从中, 英文水准也不知不觉在提升..

所以, 要有成长, 就不要给自己藉口.. 否则, 你的水平不会提高..
回复

使用道具 举报

Follow Us
 楼主| 发表于 30-1-2010 10:34 PM | 显示全部楼层
public static void main(String[] args)
{         aMethod();
           otherMethod();
           anotherMethod();        
}

由于这void main是static,一些method也必须改成static。请问有其他良策?
回复

使用道具 举报

发表于 30-1-2010 11:35 PM | 显示全部楼层
由于这void main是static,一些method也必须改成static。请问有其他良策?
1max1 发表于 30-1-2010 10:34 PM


谁说的?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 1-2-2010 09:58 PM | 显示全部楼层
不懂为何setPreferredSize没有效。

  

import javax.swing.*;

import java.awt.*;

public class Testing extends JPanel
{   

public Testing()
    {   setLayout(new GridLayout(1,2));
        
        JPanel leftPanel=new JPanel();
        leftPanel.setPreferredSize(new Dimension(224,768));
        leftPanel.setBorder(BorderFactory.createLineBorder(Color.black));
            
        JPanel rightTopPanel=new JPanel();
        rightTopPanel.setPreferredSize(new Dimension(800,576));
        rightTopPanel.setBorder(BorderFactory.createLineBorder(Color.blue));

        JPanel rightBottomPanel=new JPanel();
        rightBottomPanel.setPreferredSize(new Dimension(800,192));
        rightBottomPanel.setBorder(BorderFactory.createLineBorder(Color.red));

        JPanel rightPanel=new JPanel(new GridLayout(2,1));
        rightPanel.setPreferredSize(new Dimension(800,768));
        rightPanel.setBorder(BorderFactory.createLineBorder(Color.yellow));
        rightPanel.add(rightTopPanel);
        rightPanel.add(rightBottomPanel);

        //p2.setPreferredSize(new Dimension(800,768));;
        add(leftPanel);
        add(rightPanel);
    }



    public static void main(String[] args)
    {   JFrame frame=new JFrame("Testing!!";
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        
        frame.setContentPane(new Testing());

        frame.getContentPane().setPreferredSize(new Dimension(1440,800));
        frame.pack();
        frame.setVisible(true);
    }

}
回复

使用道具 举报

发表于 4-2-2010 03:39 PM | 显示全部楼层
回复 9# 1max1

java.awt.GridLayout.GridLayout(int rows, int cols)
Creates a grid layout with the specified number of rows and columns. All components in the layout are given equal size.

你可以改用BorderLayout,add()的時候要指定放在哪裡。

BorderLayout.EAST
BorderLayout.WEST
BorderLayout.CENTER
BorderLayout.SOUTH
BorderLayout.NORTH

一共五個方位
回复

使用道具 举报

 楼主| 发表于 9-2-2010 07:13 PM | 显示全部楼层
回复 10# MaokeJackson
找了之后才知道可用spring layout 完成。
至于border layout就不怎么变通。
谢谢你的回复。
回复

使用道具 举报

 楼主| 发表于 12-2-2010 09:26 PM | 显示全部楼层
本帖最后由 1max1 于 12-2-2010 09:49 PM 编辑

为何两个都一样是800X600却得到不同的广度?



1:
import javax.swing.*;

import java.awt.*;

public class Test extends JFrame
{   public JPanel GUI()
    {   JPanel p=new JPanel();
        p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
      
        return p;
    }

    public Test()
    {   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(800,600));
        setContentPane(GUI());

        pack();
        setVisible(true);
    }

    public static void main(String[] args)
    {   new Test();
    }

}


2:
import javax.swing.*;

import java.awt.*;

public class Test extends JFrame
{   public JPanel GUI()
    {   JPanel p=new JPanel();
        p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
        p.setPreferredSize(new Dimension(800,600));
        
        return p;
    }

    public Test()
    {   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(GUI());

        pack();
        setVisible(true);
    }

    public static void main(String[] args)
    {   new Test();
    }

}


PS:正确的800X600是第一个。
回复

使用道具 举报

发表于 13-2-2010 09:16 PM | 显示全部楼层
第一個設的是JFrame的size,第二個設的是JPanel的size。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 30-11-2025 12:13 PM , Processed in 0.418571 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表