java swing gridbaglayout布局问题

我自定义一个面板,使用网格布局,一共是四行一列,第一行是一个jlable(放图片),第二行是一个
jtextfield(显示从数据库里调用的数据),第三行是一个jtextarea(显示从数据库里调用的数据)
,第四行是一个jbutton。jtextarea布局是使用全填充的(fill=both)。问题来了,每次itextarea
显示数据时总会超出它原本所规定好的大小,把第二行和第四行往上顶和往下压了,这个怎么也解决不了。在线等大牛回复!
package cn.vr.swing.Jpanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
/*

  • author:黄龙
  • time:2016.7.29 */ import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.TextArea; import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.plaf.ButtonUI;
import javax.swing.plaf.TextUI;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.plaf.basic.BasicTextPaneUI;
import javax.swing.plaf.basic.BasicViewportUI;
import javax.swing.text.BadLocationException;
import javax.swing.text.EditorKit;
import javax.swing.text.JTextComponent;
import javax.swing.text.View;
import javax.swing.text.Position.Bias;

import org.apache.logging.log4j.core.config.DefaultConfigurationMonitor;

import cn.vr.other.Datasearch;
import cn.vr.po.Information;
import cn.vr.swing.JButton.MyimgJbutton;
import cn.vr.swing.JLable.MyimgLable;

public class Imagepanel extends JPanel{

private MyimgLable jLabel;
private MyimgJbutton jButton;
private JTextField field;
private JTextArea area;
private Information information;
Datasearch data;

List paths;
private JLabel label;
JScrollPane jScrollPa;

public Imagepanel(Information information) {
    super();
    // TODO Auto-generated constructor stub
    data=new Datasearch();
    this.information=information;
    paths=data.Dataimages(information.getInfoId());
   setLayout(new GridBagLayout());
    GridBagConstraints constraints=new GridBagConstraints();
    jLabel=new MyimgLable(paths.get(0));


    System.out.println("width="+jLabel.getWidth());



    jButton=new MyimgJbutton(System.getProperty("user.dir") +"/pic/圆角矩形.png");
    jButton.setUI(new BasicButtonUI());
    //jButton.setText("开始游戏");
    field=new JTextField();
    area=new JTextArea();

    field.setText(information.getName());
    area.setText(information.getIntroduce());

    field.setForeground(Color.WHITE);
    area.setForeground(Color.WHITE);

    Font font1=new Font("宋体", Font.BOLD , 25);
    Font font2=new Font("TimesRoman", Font.PLAIN, 15);
    field.setFont(font1);
    area.setFont(font2);

    field.setEditable(false);
    area.setEditable(false);
    field.setPreferredSize(getMaximumSize());
    area.setLineWrap(true);
    //area.setRows(getHeight());
    //第一行
    constraints.gridy=0;
    constraints.gridx=0;
    constraints.gridheight=1;
    constraints.weightx=100;
    constraints.weighty=50;
    constraints.fill=constraints.BOTH;

    add(jLabel, constraints);




    //第二行
    constraints.gridy=1;
    constraints.gridx=0;
    constraints.gridheight=1;
    constraints.weightx=100;
    constraints.weighty=10;
    constraints.fill=constraints.HORIZONTAL;
    add(field, constraints);
    field.setOpaque(false);

    //第三行
    constraints.gridy=2;
    constraints.gridx=0;
    constraints.weighty=20;
    constraints.fill=constraints.BOTH;
    //constraints.anchor=constraints.WEST;


    area.setOpaque(false);
    add(area, constraints);


    //第四行
    constraints.gridy=3;
    constraints.gridx=0;
    constraints.weighty=20;
    constraints.fill=constraints.NONE;
    constraints.anchor=constraints.EAST;
    constraints.ipadx=80;
    constraints.ipady=25;
    add(jButton, constraints);

    setOpaque(false);
}

3个回答

GridBagLayout以表格形式布置容器内的组件,将每个组件放置在每个单元格内,而一个单元格可以跨越多个单元格合并成一个单元格,即多个单元格可以组合成一个单元格,从而实现组件的自由布局。
1.构造方法
GirdBagLayout():建立一个新的GridBagLayout管理器。
GridBagConstraints():建立一个新的GridBagConstraints对象。
Grid......
答案就在这里:java Swing布局管理之GridBagLayout布局
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

qq_23828045
qq_23828045 然而并不能解决,你试过将你布局里的一个button换成jtextarea吗?然后settext(),往jtextarea里写入大量字符,你会发现你的布局会被改变
3 年多之前 回复

然而并不能解决,你试过将你布局里的一个button换成jtextarea吗?然后settext(),往jtextarea里写入大量字符,你会发现你的布局会被改变

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class gridLayoutDemo {
gridLayoutDemo(){
JFrame jf=new JFrame();
JPanel p =new JPanel(new GridLayout(4,1));
JTextArea jta=new JTextArea();
JScrollPane js=new JScrollPane(jta);
p.add(new JButton());
p.add(js);
p.add(new JButton());
p.add(new JButton());
jf.add(p);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setBounds(300, 300, 400, 400);
jf.setVisible(true);
}

public static void main(String[] args) {
    new gridLayoutDemo();
}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问