JAVA中的JPanel怎么使用呢?

JAVA中的JPanel怎么使用呢?,第1张

使用方法:

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

public class frame1 extends JFrame {

public frame1() {

setContentPane(getPanel())

setSize(200, 200)

setDefaultCloseOperation(EXIT_ON_CLOSE)

setVisible(true)

}

private JPanel getPanel() {

JPanel panel = new JPanel(new BorderLayout())

JTextArea text = new JTextArea()

//将信息整合成字符串赋值给JTextArea,

text.setText("姓名:Duck\n密码:1234 。。。。\n")

text.setVisible(true)

panel.add(text, BorderLayout.CENTER)

return panel

}

public static void main(String[] args) {

new frame1()

}

}

我的也没错啊,我是将你查询到的数据库的内容整合成一个字符串,在d出界面上的JTextArea 这个控件上显示,你可以把我给的例子运行一下看看...

我无语了,JFrame不是一个窗体么?

好吧,换一种说法,你想怎样显示这些数据?你所谓的窗体时另外d出来的还是在原有窗体上

public class T extends JFrame {

private static final long serialVersionUID = 1L

private JPanel jPanel = null

private JTextField jTextField = null

private JTextField jTextField1 = null

private JButton jButton = null

private JButton jButton1 = null

private JButton jButton2 = null

private JTable jTable = null

private DefaultTableModel tableModel = null

private JPanel getJPanel() {

if (jPanel == null) {

JLabel jLabel1 = new JLabel()

jLabel1.setBounds(new Rectangle(30, 50, 80, 25))

jLabel1.setText("请输入ISBN:")

JLabel jLabel = new JLabel()

jLabel.setBounds(new Rectangle(30, 20, 80, 25))

jLabel.setText("请输入书名:")

jPanel = new JPanel()

jPanel.setLayout(null)

jPanel.setPreferredSize(new Dimension(1, 120))

jPanel.add(jLabel)

jPanel.add(jLabel1)

jPanel.add(getJTextField())

jPanel.add(getJTextField1())

jPanel.add(getJButton())

jPanel.add(getJButton1())

jPanel.add(getJButton2())

}

return jPanel

}

private JTextField getJTextField() {

if (jTextField == null) {

jTextField = new JTextField()

jTextField.setBounds(new Rectangle(120, 20, 140, 25))

}

return jTextField

}

private JTextField getJTextField1() {

if (jTextField1 == null) {

jTextField1 = new JTextField()

jTextField1.setBounds(new Rectangle(120, 50, 140, 25))

}

return jTextField1

}

private JButton getJButton() {

if (jButton == null) {

jButton = new JButton()

jButton.setBounds(new Rectangle(270, 20, 60, 25))

jButton.setText("显示")

jButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

/* 修改处 */

}

})

}

return jButton

}

private JButton getJButton1() {

if (jButton1 == null) {

jButton1 = new JButton()

jButton1.setBounds(new Rectangle(270, 50, 60, 25))

jButton1.setText("显示")

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

/* 修改处 */

}

})

}

return jButton1

}

private JButton getJButton2() {

if (jButton2 == null) {

jButton2 = new JButton()

jButton2.setBounds(new Rectangle(240, 80, 90, 30))

jButton2.setText("显示全部")

jButton2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

/*

* 修改处此处只要改下面一行,换成从数据库读就行

* 应该在DAO层加一个查询全部的方法

* public List<Titles>getAll()具体实现自己写。

* 把114行的代码改成:List<Titles>lists = new TitleDaoImpl().getAll()

* */

List<Titles>lists = Titles.list()

// 将表行数设为0行,防止异常

tableModel.setRowCount(0)

for (int i = 0i <lists.size()i++) { // 当每有一个Titles对象就添加一行

tableModel.addRow(new Object[] {})

}

Titles instance = null

Object obj = null

Object name = null

for (int i = 0i <tableModel.getRowCount()i++) { // 行循环

instance = lists.get(i) // 为当前Titles对象赋值

for (int j = 0j <tableModel.getColumnCount()j++) {

name = tableModel.getColumnName(j)

if (name.equals("ISBN")) {

obj = instance.getISBN()

} else if (name.equals("title")) {

obj = instance.getTitle()

} else if (name.equals("publisher")) {

obj = instance.getPublisher()

} else if (name.equals("date")) {

obj = instance.getDate()

} else if (name.equals("price")) {

obj = instance.getPrice()

} else {

obj = ""

}

tableModel.setValueAt(obj, i, j)

}

}

}

})

}

return jButton2

}

private JPanel getJPanel1() {

JScrollPane jScrollPane = new JScrollPane()

jScrollPane.setViewportView(getJTable())

JPanel panel = new JPanel(new BorderLayout())

panel.add(jScrollPane, BorderLayout.CENTER)

return panel

}

private JTable getJTable() {

if (jTable == null) {

// 获得Titles类里的字段,一个字段在JTable中应该表现为一列

Field[] fields = Titles.class.getDeclaredFields()

// 将字段名保存为列名数组为DefaultTableModel所用

Object[] columnNames = new Object[fields.length]

for (int i = 0i <fields.lengthi++) {

columnNames[i] = fields[i].getName()

}

tableModel = new DefaultTableModel(columnNames, 0)

jTable = new JTable(tableModel)

}

return jTable

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

T thisClass = new T()

thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

thisClass.setVisible(true)

}

})

}

public T() {

super()

setSize(580, 475)

getContentPane().add(getJPanel(), BorderLayout.SOUTH)

getContentPane().add(getJPanel1(), BorderLayout.CENTER)

}

}


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

原文地址:https://54852.com/sjk/9727058.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存