将面板内容与面板顶部对齐
Align panel content to the top of panel
我有以下例子。我想要的是面板的内容与面板的顶部对齐,但它在面板的中心对齐。我认为使用 GridBagLayout 作为管理器并将锚点设置为 NORTH 应该可以解决问题,显然它没有。
试图澄清几点:
- 保存按钮应保留在文本区域的正下方
- textArea 应该有一个最大高度,这样它就不会随着框架的不断增长而不断增长
- 保存按钮应具有固定宽度。
另外,如果框架在高度方面变得太小,textArea 会突然调整到只有一行,我想让它逐渐减小它的大小。
package layouttests;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.MouseInfo;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class LayoutTest extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public LayoutTest()
{
setSize(50, 200);
setLocation(MouseInfo.getPointerInfo().getLocation());
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTH;
JButton okButton = new JButton("Save");
JTextArea textArea = new JTextArea(5,1);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setEditable(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
gbc.anchor = GridBagConstraints.NORTH;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.BOTH;
panel.add(scrollPane, gbc);
gbc.gridy = 1;
gbc.fill = GridBagConstraints.NONE;
panel.add(okButton, gbc);
panel.setBorder(BorderFactory.createLineBorder(Color.red));
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable()
{
@Override
public void run()
{
new LayoutTest();
}
});
}
}
我有一个类似的方法,包括大小限制
public LayoutTest()
{
setSize(50, 200);
setLocation(MouseInfo.getPointerInfo().getLocation());
final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JButton okButton = new JButton("Save");
JPanel wrapper = new JPanel();
wrapper.add(okButton);
JTextArea textArea = new JTextArea(5,1);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setEditable(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
scrollPane.setMaximumSize(new Dimension(Short.MAX_VALUE, 150));
panel.add(scrollPane);
panel.add(wrapper);
panel.add(Box.createVerticalGlue());
panel.setBorder(BorderFactory.createLineBorder(Color.red));
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
基本上,像...
gbc.anchor = GridBagConstraints.NORTH;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
应该
查看How to Use GridBagLayout了解更多详情
我有以下例子。我想要的是面板的内容与面板的顶部对齐,但它在面板的中心对齐。我认为使用 GridBagLayout 作为管理器并将锚点设置为 NORTH 应该可以解决问题,显然它没有。
试图澄清几点:
- 保存按钮应保留在文本区域的正下方
- textArea 应该有一个最大高度,这样它就不会随着框架的不断增长而不断增长
- 保存按钮应具有固定宽度。
另外,如果框架在高度方面变得太小,textArea 会突然调整到只有一行,我想让它逐渐减小它的大小。
package layouttests;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.MouseInfo;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class LayoutTest extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public LayoutTest()
{
setSize(50, 200);
setLocation(MouseInfo.getPointerInfo().getLocation());
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTH;
JButton okButton = new JButton("Save");
JTextArea textArea = new JTextArea(5,1);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setEditable(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
gbc.anchor = GridBagConstraints.NORTH;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.BOTH;
panel.add(scrollPane, gbc);
gbc.gridy = 1;
gbc.fill = GridBagConstraints.NONE;
panel.add(okButton, gbc);
panel.setBorder(BorderFactory.createLineBorder(Color.red));
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable()
{
@Override
public void run()
{
new LayoutTest();
}
});
}
}
我有一个类似的方法,包括大小限制
public LayoutTest()
{
setSize(50, 200);
setLocation(MouseInfo.getPointerInfo().getLocation());
final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JButton okButton = new JButton("Save");
JPanel wrapper = new JPanel();
wrapper.add(okButton);
JTextArea textArea = new JTextArea(5,1);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setEditable(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
scrollPane.setMaximumSize(new Dimension(Short.MAX_VALUE, 150));
panel.add(scrollPane);
panel.add(wrapper);
panel.add(Box.createVerticalGlue());
panel.setBorder(BorderFactory.createLineBorder(Color.red));
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
基本上,像...
gbc.anchor = GridBagConstraints.NORTH;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
应该
查看How to Use GridBagLayout了解更多详情