java 获取组件大小_java-根据其中的组件调整jpanel的大小

本文介绍如何在Java Swing应用中,根据组件内容动态调整JPanel的大小。通过将组件添加到使用FlowLayout的封闭面板,并调用`pack()`方法,可以实现JFrame自动适应组件的大小。示例代码展示了如何实现这一效果。
摘要由CSDN通过智能技术生成

在下面的示例中,在边框布局的西侧,有一个父面板,其中具有BoxLayout和内部几个面板.问题在于西面板从上到下覆盖了整个区域.用于父面板内的子面板的FlowLayout占用大量区域.是否可以根据组件压缩每个JPanel?另外,即使窗口最大化也应该保持不变?

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;

import javax.swing.BoxLayout;

import javax.swing.JTextField;

import javax.swing.JCheckBox;

import javax.swing.JButton;

public class Sample extends JFrame {

private JPanel contentPane;

private JTextField textField;

private JTextField textField_1;

/**

* Launch the application.

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

Sample frame = new Sample();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

/**

* Create the frame.

*/

public Sample() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 450, 300);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

contentPane.setLayout(new BorderLayout(0, 0));

setContentPane(contentPane);

JPanel panel = new JPanel();

contentPane.add(panel, BorderLayout.NORTH);

JLabel lblNewLabel = new JLabel("New label");

panel.add(lblNewLabel);

JPanel panel_1 = new JPanel();

contentPane.add(panel_1, BorderLayout.WEST);

panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));

JPanel panel_2 = new JPanel();

panel_1.add(panel_2);

textField = new JTextField();

panel_2.add(textField);

textField.setColumns(2);

textField_1 = new JTextField();

panel_2.add(textField_1);

textField_1.setColumns(2);

JPanel panel_3 = new JPanel();

panel_1.add(panel_3);

JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");

panel_3.add(chckbxNewCheckBox);

JPanel panel_4 = new JPanel();

panel_1.add(panel_4);

JButton btnNewButton = new JButton("New");

panel_4.add(btnNewButton);

JButton btnNewButton_1 = new JButton("New");

panel_4.add(btnNewButton_1);

}

}

解决方法:

一种方法是将panel_1添加到封闭的面板中.当您包装()封闭的Window时,默认的FlowLayout使其符合封闭组件的首选大小.我在CENTER中添加了一个灰色面板作为占位符;调整框架大小以查看效果.

JPanel flowPanel = new JPanel();

flowPanel.add(panel_1);

经测试:

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;

import javax.swing.BoxLayout;

import javax.swing.JTextField;

import javax.swing.JCheckBox;

import javax.swing.JButton;

public class Sample extends JFrame {

private JPanel contentPane;

private JTextField textField;

private JTextField textField_1;

/**

* Launch the application.

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

try {

Sample frame = new Sample();

frame.pack();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

/**

* Create the frame.

*/

public Sample() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

contentPane.setLayout(new BorderLayout(0, 0));

setContentPane(contentPane);

JPanel panel = new JPanel();

contentPane.add(panel, BorderLayout.NORTH);

JLabel lblNewLabel = new JLabel("New label");

panel.add(lblNewLabel);

JPanel panel_1 = new JPanel();

panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));

JPanel panel_2 = new JPanel();

panel_1.add(panel_2);

textField = new JTextField();

panel_2.add(textField);

textField.setColumns(2);

textField_1 = new JTextField();

panel_2.add(textField_1);

textField_1.setColumns(2);

JPanel panel_3 = new JPanel();

panel_1.add(panel_3);

JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");

panel_3.add(chckbxNewCheckBox);

JPanel panel_4 = new JPanel();

panel_1.add(panel_4);

JButton btnNewButton = new JButton("New");

panel_4.add(btnNewButton);

JButton btnNewButton_1 = new JButton("New");

panel_4.add(btnNewButton_1);

JPanel flowPanel = new JPanel();

flowPanel.add(panel_1);

contentPane.add(flowPanel, BorderLayout.WEST);

contentPane.add(new JPanel(){

@Override

public Dimension getPreferredSize() {

return new Dimension(320, 240);

}

@Override

public Color getBackground() {

return Color.lightGray;

}

}, BorderLayout.CENTER);

}

}

标签:layout,swing,jpanel,java

来源: https://codeday.me/bug/20191121/2055458.html

好的,我了解你的问题。你想知道如何使用Java构建一个简单的界面通讯录。 首先,你需要选择一个Java GUI库,比如SwingJavaFX。在这个例子中,我将使用Swing。 接下来,你需要创建一个通讯录类,该类将存储联系人的信息。你可以使用Java集合框架中的HashMap来存储联系人信息,其中键是联系人的名称,值是联系人的详细信息。 下面是一个简单的通讯录类的示例代码: ``` import java.util.HashMap; public class AddressBook { private HashMap<String, String> contacts; public AddressBook() { contacts = new HashMap<String, String>(); } public void addContact(String name, String info) { contacts.put(name, info); } public String getContactInfo(String name) { return contacts.get(name); } public void removeContact(String name) { contacts.remove(name); } } ``` 现在,你需要创建一个图形用户界面来与通讯录类交互。你可以使用Swing库中的JFrame、JPanel、JButton等组件来创建界面。 下面是一个简单的通讯录GUI界面的示例代码: ``` import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class AddressBookGUI extends JFrame { private AddressBook addressBook; private JTextArea displayArea; private JTextField nameField, infoField; public AddressBookGUI() { super("Address Book"); addressBook = new AddressBook(); JPanel inputPanel = new JPanel(new GridLayout(3, 2)); inputPanel.add(new JLabel("Name:")); nameField = new JTextField(); inputPanel.add(nameField); inputPanel.add(new JLabel("Info:")); infoField = new JTextField(); inputPanel.add(infoField); JButton addButton = new JButton("Add"); addButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String name = nameField.getText(); String info = infoField.getText(); addressBook.addContact(name, info); displayArea.append("Added contact: " + name + "\n"); nameField.setText(""); infoField.setText(""); } }); JButton removeButton = new JButton("Remove"); removeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String name = nameField.getText(); addressBook.removeContact(name); displayArea.append("Removed contact: " + name + "\n"); nameField.setText(""); infoField.setText(""); } }); JPanel buttonPanel = new JPanel(new GridLayout(1, 2)); buttonPanel.add(addButton); buttonPanel.add(removeButton); displayArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(displayArea); getContentPane().add(inputPanel, BorderLayout.NORTH); getContentPane().add(buttonPanel, BorderLayout.CENTER); getContentPane().add(scrollPane, BorderLayout.SOUTH); setSize(400, 300); setVisible(true); } public static void main(String[] args) { AddressBookGUI gui = new AddressBookGUI(); } } ``` 在这个GUI中,你可以输入联系人的名称和详细信息,并使用“添加”按钮将它们添加到通讯录中。你还可以使用“删除”按钮删除现有联系人。 当你点击“添加”或“删除”按钮时,GUI将调用通讯录类的方法来更新通讯录。在更新通讯录后,GUI会将操作结果显示在文本区域中。 这只是一个简单的通讯录GUI的例子,你可以根据需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值