Java 使组件只占用特定部分的空间(如2/3或9/10)
为我使用布局会导致很多挫折,最终我使用了绝对布局,然后手动缩放组件 假设我有一个文本区域,我希望它占据屏幕的2/3。 我真正想要的是有一个包含3行的GridLayout,并强制TextArea同时获取其中的两行 例如:Java 使组件只占用特定部分的空间(如2/3或9/10),java,swing,layout,Java,Swing,Layout,为我使用布局会导致很多挫折,最终我使用了绝对布局,然后手动缩放组件 假设我有一个文本区域,我希望它占据屏幕的2/3。 我真正想要的是有一个包含3行的GridLayout,并强制TextArea同时获取其中的两行 例如: 第1行(被第一个文本区域占用) 第2行(被相同的文本区域占用) 第3行(被按钮占据) 这是一张使用Gridbag布局的图片(由l修改)。我希望绿色区域由单个组件占用 这只是表达我自己的一种方式,我肯定还有其他的方式(或布局)可以做到这一点。但是请注意,我也希望使用其他特定的
- 第1行(被第一个文本区域占用)
- 第2行(被相同的文本区域占用)
- 第3行(被按钮占据)
那会节省很多时间。谢谢 学习网格布局。说真的,一旦你学会了,你就能很快地做你需要的一切。 您可能还会找到一些有用的GUI设计器。对于swing,我个人喜欢netbeans中的那个
在你学会如何使用它们之前,布局是令人沮丧的。请记住,您正在为用户创建应用程序。每当他们想调整窗口大小时,他们都会感到沮丧。你不想那样。学习GridBagLayout。说真的,一旦你学会了,你就能很快地做你需要的一切。 您可能还会找到一些有用的GUI设计器。对于swing,我个人喜欢netbeans中的那个
在你学会如何使用它们之前,布局是令人沮丧的。请记住,您正在为用户创建应用程序。每当他们想调整窗口大小时,他们都会感到沮丧。您不希望这样。我认为GridBagLayout在这种特殊情况下不起作用,因为您对相对宽度没有所需的控制。相反,我建议你去看看,虽然不是核心Java的一部分,但它是免费下载的,非常灵活和强大,并且可用于Swing和其他几个GUI库。我认为GridBagLayout在这种特殊情况下不起作用,因为您对相对宽度没有所需的控制。相反,我建议您检查一下,尽管不是核心Java的一部分,但这种布局是免费下载的,它非常灵活和强大,可用于Swing和其他几个GUI库。
import Java.awt.*;
import java.awt.*;
import javax.swing.*;
public class CopyTextNorthPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JLabel hidelLabel;
private JLabel firstLabel;
private JTextField firstText;
public CopyTextNorthPanel() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
for (int k = 0; k < 50; k++) {
hidelLabel = new JLabel(" ");
hidelLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 0.5;
gbc.weighty = 0.5;
gbc.gridx = k;
gbc.gridy = 0;
add(hidelLabel, gbc);
}
for (int k = 0; k < 5; k++) {
firstLabel = new JLabel("Testing Label : ", SwingConstants.RIGHT);
firstLabel.setFont(new Font("Serif", Font.BOLD, 20));
firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(0, 0, 5, 0);
gbc.gridx = 0;
gbc.gridwidth = 8;
gbc.gridy = k + 1;
add(firstLabel, gbc);
}
for (int k = 0; k < 5; k++) {
firstText = new JTextField("Testing TextField");
firstText.setFont(new Font("Serif", Font.BOLD, 20));
firstText.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(0, 0, 5, 0);
gbc.gridx = 9;
gbc.gridwidth = k + 8;
gbc.gridy = k + 1;
add(firstText, gbc);
}
for (int k = 0; k < 5; k++) {
firstLabel = new JLabel("Testing Label : ", SwingConstants.RIGHT);
firstLabel.setFont(new Font("Serif", Font.BOLD, 20));
firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(0, 0, 5, 0);
gbc.gridx = 20 + k;
gbc.gridwidth = 8;
gbc.gridy = k + 1;
add(firstLabel, gbc);
}
for (int k = 0; k < 5; k++) {
firstText = new JTextField("Testing TextField");
firstText.setFont(new Font("Serif", Font.BOLD, 20));
firstText.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(0, 0, 5, 0);
gbc.gridx = 29 + k;
gbc.gridwidth = 21 - k;
gbc.gridy = k + 1;
add(firstText, gbc);
}
}
}
导入javax.swing.*;
公共类CopyTextNorthPanel扩展了JPanel{
私有静态最终长serialVersionUID=1L;
私人JLabel hidelLabel;
私人JLabel firstLabel;
私有JTextField firstText;
公共CopyTextNorthPanel(){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
setComponentOrientation(ComponentOrientation.从左到右);
对于(int k=0;k<50;k++){
hidelLabel=新的JLabel(“”);
setboorder(BorderFactory.createLineBorder(Color.BLACK,1));
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.weightx=0.5;
gbc.weighty=0.5;
gbc.gridx=k;
gbc.gridy=0;
添加(希德拉贝尔,gbc);
}
对于(int k=0;k<5;k++){
firstLabel=新的JLabel(“测试标签:”,SwingConstants.RIGHT);
setFont(新字体(“衬线”,Font.BOLD,20));
firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.插图=新插图(0,0,5,0);
gbc.gridx=0;
gbc.gridwidth=8;
gbc.gridy=k+1;
添加(第一标签,gbc);
}
对于(int k=0;k<5;k++){
firstText=新的JTextField(“测试文本字段”);
setFont(新字体(“衬线”,Font.BOLD,20));
setboorder(BorderFactory.createLineBorder(Color.BLACK,1));
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.插图=新插图(0,0,5,0);
gbc.gridx=9;
gbc.gridwidth=k+8;
gbc.gridy=k+1;
添加(第一个文本,gbc);
}
对于(int k=0;k<5;k++){
firstLabel=新的JLabel(“测试标签:”,SwingConstants.RIGHT);
setFont(新字体(“衬线”,Font.BOLD,20));
firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.插图=新插图(0,0,5,0);
gbc.gridx=20+k;
gbc.gridwidth=8;
gbc.gridy=k+1;
添加(第一标签,gbc);
}
对于(int k=0;k<5;k++){
firstText=新的JTextField(“测试文本字段”);
setFont(新字体(“衬线”,Font.BOLD,20));
setboorder(BorderFactory.createLineBorder(Color.BLACK,1));
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.插图=新插图(0,0,5,0);
gbc.gridx=29+k;
gbc.gridwidth=21-k;
gbc.gridy=k+1;
添加(第一个文本,gbc);
}
}
}
导入java.awt.*;
导入javax.swing.*;
公共类CopyTextNorthPanel扩展了JPanel{
私有静态最终长serialVersionUID=1L;
私人JLabel hidelLabel;
私人JLabel firstLabel;
私有JTextField firstText;
公共CopyTextNorthPanel(){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
setComponentOrientation(ComponentOrientation.从左到右);
对于(int k=0;k<50;k++){
hidelLabel=新的JLabel(“”);
setboorder(BorderFactory.createLineBorder(Color.BLACK,1));
gbc.fill=GridBagConstraints.HORIZONTAL;
魏国斌
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GridBagSSCCE extends JPanel
{
JPanel red;
JPanel green;
public GridBagSSCCE()
{
setLayout( new GridBagLayout() );
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.VERTICAL;
red = new JPanel();
red.setBackground( Color.RED );
red.setPreferredSize( new Dimension(300, 10) );
gbc.weighty = 0.1;
add(red, gbc);
green = new JPanel();
green.setBackground( Color.GREEN );
green.setPreferredSize( new Dimension(300, 90) );
gbc.gridy = 1;
gbc.weighty = 0.9;
add(green, gbc);
JPanel buttons = new JPanel();
buttons.add( new JButton("Ok") );
buttons.add( new JButton("Cancel") );
buttons.setAlignmentX(JPanel.RIGHT_ALIGNMENT);
gbc.gridy = 2;
gbc.weighty = 0.0;
gbc.anchor = GridBagConstraints.LINE_END;
add(buttons, gbc);
addComponentListener( new ComponentAdapter()
{
public void componentResized(ComponentEvent e)
{
System.out.println(red.getSize() + " : " + green.getSize());
}
});
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("GridBagSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new GridBagSSCCE() );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
JTextArea textArea = new JTextArea(2, 40);
JScrollPane scrollPane = new JScrollPane( textArea );
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(buttonPanel, BorderLayout.SOUTH);
frame.pack();