java中Panel如何添加边框???????

java中Panel如何添加边框???????,第1张

import javax.swing.*

import java.awt.*

import java.awt.event.*

final class p extends Frame {

    final static private Dimension SIZE = new Dimension(800, 600)

    public String getTitle() {return "p"}

    public Dimension getPreferredSize() {return SIZE}

    public Dimension getMinimumSize() {return SIZE}

    public Dimension getMaximumSize() {return SIZE}

    public Dimension getSize() {return SIZE}

    private Panel panel

    p() throws HeadlessException {

        init()

        attachListeners()

        doLay()

        setVisible(true)

    }

    private void init() {

        panel=new Panel(){

            public Dimension getPreferredSize() {

                return new Dimension(100,233)

            }

            public void paint(Graphics g) {

                super.paint(g)

                Graphics g2=g.create()

                g2.setColor(Color.RED)

                

                g2.drawLine(0,0,getWidth(), 0)

                g2.drawLine(0,getHeight()-2,getWidth()-2, getHeight()-2)

                g2.drawLine(0,0,0,getHeight())

                g2.drawLine(getWidth()-2,0,getWidth()-2,getHeight()-2)

                g2.dispose()

            }

        }

        panel.setBounds(44,44,111,222)

    }

    private void attachListeners() {

        addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {

                System.exit(1)

            }

        })

    }

    private void doLay() {

        setLayout(null)

        add(panel)

        pack()

    }

    public static void main(String... args) {

        System.setProperty("swing.defaultlaf", "com.sun.java.swing.plaf.windows.WindowsLookAndFeel")

        SwingUtilities.invokeLater(p::new)

    }

}

使用方法:

JPanel可以为添加到窗体中的轻型控件提供通用的容器。默认情况下,面板容器不会向控件添加任何除自身背景之外的颜色,但是,可以轻松地向其添加边框(borders)并根据需要改制样式。

在大多数Java GUI外观体验(look and feel)中,面板容器默认是不透明。不透明的面板容器跟普通的目录窗格功能差别不大,并且可以有效帮助样式改进。

设置图层管理器

和其他容器(container)一样,面板容器panel也使用布局管理器(Layout Manager)对添加到容器中的组件(compnent)进行定位和设置尺寸大小。

默认情况下,面板容器的布局管理器是FlowLayout(流式布局)类的一个实例,这个类对放置在容器中的空间按行进行布局(从左到右诸行排列)。在创建面板容器时,你可以轻松地使用任何其他

布局管理器通过调用setLayout方法或指定一个布局管理器。

如下是一个在创建面板容器时设置图层管理器的例子:

JPanel p=new JPanel(new BorderLayout())

但这种方法不能用在BoxLayout(盒子布局)中,因为BoxLayout构造器需要一个预留(pre-existing)容器。如下所示:

JPanel p=new JPanel()

p.setLayout(new BoxLayout(p,BoxLayout.PAGE_AXIS))

添加控件

向面板容器中添加组件时使用add()方法,而向add()方法中传递的参数决定于该面板容器使用哪个布局管理器。当所用的布局管理器是FlowLayout,BoxLayout,GridLayout,或SpringLayout时,像通常那样向add()方法传递单一的参数即可,如下所示:

aFlowPanel.add(aComponent)

aFlowPanel.add(anotherComponent)

而当布局管理器为BorderLayout时,还需要提供另一个参数来指定添加到容器中控件的位置,例如:

aBorderPanel.add(aComponent,BorderLayout.CENTER)

aBorderPanel.add(anotherComponent,BorderLayout.PAGE_END)

对于GridBagLayout布局管理器,可以使用上述任一方法,但必须以某种方式对每个组件指定GridBagConstraints,例如:

JPanel pane=new JPanel(new GridBagLayout())

GridBagConstraints c=new GridBagConstraints()

警告

Swing不是线程安全的。

此类的序列化对象与以后的Swing版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同Swing版本的应用程序之间进行RMI(Remote Method Invocation,远程方法调用)。

扩展资料:

JPanel一个面板也是一个容器JPanel Pan=new JPanel()

Pan.setLayout(null)//设置为空布局也就是自由布局

Pan.add(控件)//添加控件

JPanel是java图形化界面中最常使用的容器。实例:在窗体中添加一个蓝色的面板

//PanelDemo.java

import javax.swing.*

import java.awt.*//引入AWT包,因为要使用到颜色类

class PanelDemo{

public static void main(String[]args)throws Exception

{JFrame f=new JFrame("第一个Java窗口")

f.setSize(300,200)

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

f.setVisible(true)

f.setResizable(false)

f.setLocationRelativeTo(null)

f.setLayout(null)//设置窗体布局为空布局

JPanel p=new JPanel()//实例化一个面板

//设置面板背景色为蓝色,如果不引入AWT包,程序将出错,可以试试看

p.setBackground(Color.BLUE)

p.setSize(100,100)//设置面板对象大小

f.getContentPane().add(p)//将面板添加到窗体中

//如果使用下面添加面板的方法,面板将布满整个窗口,可以试试看

//f.setContentPane(p)

}

}

参考资料:

百度百科——JPanel

如果你想给窗口内部加上一个边框,可以在窗口内加一个Panel,设置Panel的边框就行。

如果你想修改 *** 作系统提供的边框颜色,是做不到的,但是可以去掉系统提供的边框,重写paint方法自己模拟一个:

import java.awt.Color

import java.awt.Graphics

import java.awt.Rectangle

import javax.swing.JFrame

import javax.swing.JPanel

import javax.swing.border.LineBorder

public class MyFrame {

public static void main(String[] args) {

JFrame frame1 = new JFrame()

frame1.setBounds(400, 300, 200, 200)

frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

JPanel panel = new JPanel()

panel.setBorder(new LineBorder(Color.red))

frame1.add(panel)

frame1.setVisible(true)

JFrame frame2 = new JFrame() {

public void paint(Graphics g) {

super.paint(g)

Rectangle rect = this.getBounds()

int width = (int) rect.getWidth() - 1

int height = (int) rect.getHeight() - 1

g.setColor(Color.red)

g.drawRect(0, 0, width, height)

}

}

frame2.setBounds(650, 300, 200, 200)

frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

frame2.setUndecorated(true)

frame2.setVisible(true)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7740083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存