Java 如何在GridBagLayout中将元素与顶部对齐?
单击按钮后,我想在Java 如何在GridBagLayout中将元素与顶部对齐?,java,swing,alignment,layout-manager,gridbaglayout,Java,Swing,Alignment,Layout Manager,Gridbaglayout,单击按钮后,我想在GridBagLayout中放置一个文本元素。 但是元素是垂直居中的。那么我如何强制网格包布局将元素定位到顶部呢 下面是一个示例代码: import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; public class RefreshPanel { private JFrame frame = new JFrame(); private JPanel pane
GridBagLayout
中放置一个文本元素。
但是元素是垂直居中的。那么我如何强制网格包布局将元素定位到顶部呢
下面是一个示例代码:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class RefreshPanel {
private JFrame frame = new JFrame();
private JPanel panel = new JPanel();
private JTextPane [] textPane;// = new JTextPane[1];
private JScrollPane scrollbar;
private ArrayList arrayList = new ArrayList();
private JButton newItem = new JButton("new");
private GridBagLayout gbl = new GridBagLayout();
private JMenu menuStart= new JMenu("Start");
private JMenu menuEdit= new JMenu("Edit");
private JMenu menuWindow= new JMenu("Window");
private JMenu menuHelp= new JMenu("help");
private JMenuBar menuBar = new JMenuBar();
RefreshPanel() {
menuBar.add(menuStart);
menuBar.add(menuEdit);
menuBar.add(menuWindow);
menuBar.add(menuHelp);
scrollbar = new JScrollPane(panel);
panel.setBackground(Color.WHITE);
panel.setLayout(gbl);
addButtonListener();
createFrame();
} //constructor
public void addButtonListener() {
newItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
arrayList.add("data");
textPane = generateTextPane(arrayList.size(), arrayList);
System.out.println("Länge: "+textPane.length);
for(int i=0;i<textPane.length;i++) {
System.out.println(textPane[i].getText());
addComponent(panel, gbl, textPane[i], 0, i, 1, 1, 1, 0);
panel.revalidate();
}
frame.revalidate();
}
});
}
private JTextPane[] generateTextPane(int arraySize, ArrayList arrayList) {
JTextPane [] textPane = new JTextPane[arraySize];
for(int i=0;i<textPane.length;i++) {
textPane[i]=new JTextPane();
textPane[i].setText((String) arrayList.get(i));
System.out.println("length >> "+textPane.length);
}
return textPane;
}
public void addComponent(Container cont,
GridBagLayout gbl,
Component c,
int x, int y,
int width, int height,
double weightx, double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = x; gbc.gridy = y;
gbc.gridwidth = width; gbc.gridheight = height;
gbc.weightx = weightx; gbc.weighty = weighty;
gbc.anchor = GridBagConstraints.SOUTH;
gbl.setConstraints( c, gbc );
cont.add( c );
}
public void createFrame() {
frame.add(menuBar, BorderLayout.NORTH);
frame.add(scrollbar, BorderLayout.CENTER);
frame.add(newItem, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(300,300));
frame.setVisible(true);
}
public static void main(String [] args) {
new RefreshPanel();
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
公开课复习小组{
私有JFrame=新JFrame();
private JPanel panel=new JPanel();
私有JTextPane[]textPane;/=新JTextPane[1];
私有JScrollPane滚动条;
私有ArrayList ArrayList=新ArrayList();
私有JButton newItem=新JButton(“新”);
私有GridBagLayout gbl=新GridBagLayout();
私有JMenu menuStart=新JMenu(“开始”);
私有JMenu菜单编辑=新JMenu(“编辑”);
私有JMenu菜单窗口=新JMenu(“窗口”);
私有JMenu菜单帮助=新JMenu(“帮助”);
private JMenuBar menuBar=new JMenuBar();
刷新面板(){
菜单栏。添加(菜单栏);
菜单栏。添加(菜单编辑);
menuBar.add(menuWindow);
菜单栏。添加(菜单帮助);
滚动条=新的JScrollPane(面板);
面板.立根背景(颜色.白色);
面板设置布局(gbl);
addButtonListener();
createFrame();
}//构造函数
public void addButtonListener(){
addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
arrayList.add(“数据”);
textPane=generateTextPane(arrayList.size(),arrayList);
System.out.println(“Länge:+textPane.length”);
对于(int i=0;i我已更改了您的GridBagLayout属性。请检查以下内容:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class RefreshPanel {
private JFrame frame = new JFrame();
private JPanel panel = new JPanel();
private JTextPane [] textPane;// = new JTextPane[1];
private JScrollPane scrollbar;
private ArrayList arrayList = new ArrayList();
private JButton newItem = new JButton("new");
private GridBagLayout gbl = new GridBagLayout();
private JMenu menuStart= new JMenu("Start");
private JMenu menuEdit= new JMenu("Edit");
private JMenu menuWindow= new JMenu("Window");
private JMenu menuHelp= new JMenu("help");
private JMenuBar menuBar = new JMenuBar();
RefreshPanel() {
menuBar.add(menuStart);
menuBar.add(menuEdit);
menuBar.add(menuWindow);
menuBar.add(menuHelp);
scrollbar = new JScrollPane(panel);
panel.setBackground(Color.WHITE);
gbl.columnWidths = new int[]{0, 0, 0, 0};
gbl.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
gbl.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
gbl.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
panel.setLayout(gbl);
addButtonListener();
createFrame();
} //constructor
public void addButtonListener() {
newItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
arrayList.add("data");
textPane = generateTextPane(arrayList.size(), arrayList);
System.out.println("Länge: "+textPane.length);
for(int i=0;i<textPane.length;i++) {
System.out.println(textPane[i].getText());
panel.add(textPane[i],new GridBagConstraints( 0, i, 1, 1,
1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
panel.revalidate();
}
frame.revalidate();
}
});
}
private JTextPane[] generateTextPane(int arraySize, ArrayList arrayList) {
JTextPane [] textPane = new JTextPane[arraySize];
for(int i=0;i<textPane.length;i++) {
textPane[i]=new JTextPane();
textPane[i].setText((String) arrayList.get(i));
System.out.println("length >> "+textPane.length);
}
return textPane;
}
public void addComponent(Container cont,
GridBagLayout gbl,
Component c,
int x, int y,
int width, int height,
double weightx, double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = x; gbc.gridy = y;
gbc.gridwidth = width; gbc.gridheight = height;
gbc.weightx = weightx; gbc.weighty = weighty;
gbc.anchor = GridBagConstraints.SOUTH;
gbl.setConstraints( c, gbc );
cont.add( c );
}
public void createFrame() {
frame.add(menuBar, BorderLayout.NORTH);
frame.add(scrollbar, BorderLayout.CENTER);
frame.add(newItem, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(300,300));
frame.setVisible(true);
}
public static void main(String [] args) {
new RefreshPanel();
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
公开课复习小组{
私有JFrame=新JFrame();
private JPanel panel=new JPanel();
私有JTextPane[]textPane;/=新JTextPane[1];
私有JScrollPane滚动条;
私有ArrayList ArrayList=新ArrayList();
私有JButton newItem=新JButton(“新”);
私有GridBagLayout gbl=新GridBagLayout();
私有JMenu menuStart=新JMenu(“开始”);
私有JMenu菜单编辑=新JMenu(“编辑”);
私有JMenu菜单窗口=新JMenu(“窗口”);
私有JMenu菜单帮助=新JMenu(“帮助”);
private JMenuBar menuBar=new JMenuBar();
刷新面板(){
菜单栏。添加(菜单栏);
菜单栏。添加(菜单编辑);
menuBar.add(menuWindow);
菜单栏。添加(菜单帮助);
滚动条=新的JScrollPane(面板);
面板.立根背景(颜色.白色);
gbl.columnWidths=newint[]{0,0,0,0};
gbl.rowHeights=newint[]{0,0,0,0,0,0,0,0,0,0,0,0};
gbl.columnWeights=新的double[]{0.0,0.0,1.0,double.MIN_值};
gbl.rowWeights=新的double[]{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,double.MIN_值};
面板设置布局(gbl);
addButtonListener();
createFrame();
}//构造函数
public void addButtonListener(){
addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
arrayList.add(“数据”);
textPane=generateTextPane(arrayList.size(),arrayList);
System.out.println(“Länge:+textPane.length”);
对于(int i=0;我真的不明白你的目标是什么。“对齐到顶部”没有真正意义。我们说的是垂直排列吗?水平?@DSQuare:对不起,我表达得有点不正确……文本显示在中间(垂直位置)我的面板的,但我想在顶部显示。哦,确保布局中有一个weighty=1.0,如果你所有的东西都是weighty=0.0,它只会向中间移动。