我一直在尝试在以下代码中设置年龄的固定列宽...问题是,当我在左侧面板上添加标签时,宽度会自动增加...而我希望该列固定宽度...

有人可以帮我吗?

这是代码:

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;

import java.io.IOException;

public class CurrentItem extends JPanel{

    private static JFrame currentScreen;

    public CurrentItem(JFrame p) {

        GridBagConstraints c = new GridBagConstraints();

        //Borramos todo lo que haya en la pantalla
        this.removeAll();
        this.revalidate();

        currentScreen = p;

        this.setBackground(Color.LIGHT_GRAY);

        this.setLayout(new GridBagLayout());

        currentScreen.add(this);

        // --->
        Panel leftPanel = new Panel();
        leftPanel.setBackground(Color.BLACK);

        c.weightx = 1.5;
        c.weighty = 1;
        //c.fill = GridBagConstraints.BOTH;
        this.add(leftPanel, c);
        // <---

        // --->
        Panel secondPanel = new Panel();
        secondPanel.setBackground(Color.green);

        c.weightx = 0.25;
        c.weighty = 1;
        c.fill = GridBagConstraints.BOTH;

        this.add(secondPanel, c);
        // <---

        // --->
        Panel rightPanel = new Panel();
        rightPanel.setBackground(Color.CYAN);

        c.weightx = 1.5;
        c.weighty = 1;
        c.fill = GridBagConstraints.BOTH;

        this.add(rightPanel, c);
        // <---

        currentScreen.setVisible(true);

        this.requestFocusInWindow();
    }
}

最佳答案

GridBagLayout将组件放置在网格中的矩形(单元)中,然后使用组件的首选大小来确定单元的大小。

权重用于确定如何在列(weightx)和行(weighty)之间分配空间;这对于指定调整大小的行为很重要。

通常,权重的极限值设置为0.0和1.0:必要时使用介于两者之间的数字。

阅读更多How to Use GridBagLayout

示例代码:(下面的代码将固定宽度列设置为100%的垂直尺寸。)

Panel leftPanel = new Panel() {
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(..., ...);
    }
};

删除第一列的weightx并覆盖getPreferredSize()方法。
leftPanel.setBackground(Color.BLACK);

c.weighty = 1;
c.fill = GridBagConstraints.VERTICAL;
this.add(leftPanel, c);

关于java - GridBagLayout:如何设置固定的列宽?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24780480/

10-11 22:35
查看更多