Java Swing:JTextArea填充整个分配的空间
我有上面的代码,它模拟了应用于GridBagLayout()的黄金比例思想。结果如下: 现在,您可以看到文本区域是空的。 我想它的主机面板基本上是充满了 “白色”空间,即使此时文本区域为空。 我记得在SE这里读到,Java Swing:JTextArea填充整个分配的空间,java,swing,Java,Swing,我有上面的代码,它模拟了应用于GridBagLayout()的黄金比例思想。结果如下: 现在,您可以看到文本区域是空的。 我想它的主机面板基本上是充满了 “白色”空间,即使此时文本区域为空。 我记得在SE这里读到,BorderLayout是一条路, 所以我试过了。 因此,本质上,我希望文本区域填充它的宿主 面板到边缘,滚动窗格也可见 如何做到这一点?上述MWE最相关的代码可能是MyTextPanel类 现在,您可以看到文本区域是空的 这是因为您实际上没有将文本区域添加到滚动窗格中 import
BorderLayout
是一条路,
所以我试过了。
因此,本质上,我希望文本区域填充它的宿主
面板到边缘,滚动窗格也可见
如何做到这一点?上述MWE最相关的代码可能是MyTextPanel类
现在,您可以看到文本区域是空的
这是因为您实际上没有将文本区域添加到滚动窗格中
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import static java.awt.GridBagConstraints.BOTH;
public class mwe extends JFrame {
private JPanel x, y, z, u,v,w,jtext;
private class MyBorderedPanel extends JPanel {
MyBorderedPanel( String title ) {
this.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), title
));
}
}
private class MyTextPanel extends JPanel {
JTextArea textArea;
MyTextPanel( String title ) {
textArea= new JTextArea();
this.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
title));
this.setLayout(new BorderLayout());
JScrollPane pane= new JScrollPane();
pane.add(textArea);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
this.add(pane);
}
}
public mwe() {
x= new MyBorderedPanel("x");
y= new MyBorderedPanel("y");
z= new MyBorderedPanel("z");
u= new MyBorderedPanel("u");
v= new MyBorderedPanel("v");
w= new MyBorderedPanel("w");
jtext= new MyTextPanel("textArea");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
manageLayout();
}
private void manageLayout() {
this.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = BOTH;
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = constraints.weighty = 13.00;
constraints.gridwidth = 1;
constraints.gridheight = 4;
this.add(x, constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.weightx = constraints.weighty = 8.00;
constraints.gridwidth = 3;
constraints.gridheight = 1;
this.add(y, constraints);
{ //adding dummes: 2x2, 1x1, 1x1
constraints.gridx = 1;
constraints.gridy = 1;
constraints.weightx = constraints.weighty = 2.00;
constraints.gridwidth = 1;
constraints.gridheight = 2;
this.add(u, constraints);
constraints.gridx = 2;
constraints.gridy = 1;
constraints.weightx = constraints.weighty = 1.00;
constraints.gridwidth = 1;
constraints.gridheight = 1;
this.add(v, constraints);
constraints.gridx = 2;
constraints.gridy = 2;
constraints.weightx = constraints.weighty = 1.00;
constraints.gridwidth = 1;
constraints.gridheight = 1;
this.add(v, constraints);
}
constraints.gridx = 3;
constraints.gridy = 1;
constraints.weightx = constraints.weighty = 5.00;
constraints.gridwidth = 1;
constraints.gridheight = 3;
this.add(jtext, constraints);
constraints.gridx = 1;
constraints.gridy = 3;
constraints.weightx = constraints.weighty = 3.00;
constraints.gridwidth = 2;
constraints.gridheight = 1;
this.add(z, constraints);
}
public static void main( String ... args ) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame= null;
frame = new mwe();
frame.pack();
frame.setVisible(true);
}
});
}
}
上面的代码是错误的。您不能将组件直接“添加”到JScrollPane
而是将组件添加到JScrollPane
的JViewport
这可以通过执行以下任一操作来实现:
JScrollPane pane= new JScrollPane();
pane.add(textArea);
将文本区域添加到视口,或
JScrollPane pane= new JScrollPane(textArea);
现在,您可以看到文本区域是空的
这是因为您实际上没有将文本区域添加到滚动窗格中
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import static java.awt.GridBagConstraints.BOTH;
public class mwe extends JFrame {
private JPanel x, y, z, u,v,w,jtext;
private class MyBorderedPanel extends JPanel {
MyBorderedPanel( String title ) {
this.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), title
));
}
}
private class MyTextPanel extends JPanel {
JTextArea textArea;
MyTextPanel( String title ) {
textArea= new JTextArea();
this.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
title));
this.setLayout(new BorderLayout());
JScrollPane pane= new JScrollPane();
pane.add(textArea);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
this.add(pane);
}
}
public mwe() {
x= new MyBorderedPanel("x");
y= new MyBorderedPanel("y");
z= new MyBorderedPanel("z");
u= new MyBorderedPanel("u");
v= new MyBorderedPanel("v");
w= new MyBorderedPanel("w");
jtext= new MyTextPanel("textArea");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
manageLayout();
}
private void manageLayout() {
this.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = BOTH;
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = constraints.weighty = 13.00;
constraints.gridwidth = 1;
constraints.gridheight = 4;
this.add(x, constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.weightx = constraints.weighty = 8.00;
constraints.gridwidth = 3;
constraints.gridheight = 1;
this.add(y, constraints);
{ //adding dummes: 2x2, 1x1, 1x1
constraints.gridx = 1;
constraints.gridy = 1;
constraints.weightx = constraints.weighty = 2.00;
constraints.gridwidth = 1;
constraints.gridheight = 2;
this.add(u, constraints);
constraints.gridx = 2;
constraints.gridy = 1;
constraints.weightx = constraints.weighty = 1.00;
constraints.gridwidth = 1;
constraints.gridheight = 1;
this.add(v, constraints);
constraints.gridx = 2;
constraints.gridy = 2;
constraints.weightx = constraints.weighty = 1.00;
constraints.gridwidth = 1;
constraints.gridheight = 1;
this.add(v, constraints);
}
constraints.gridx = 3;
constraints.gridy = 1;
constraints.weightx = constraints.weighty = 5.00;
constraints.gridwidth = 1;
constraints.gridheight = 3;
this.add(jtext, constraints);
constraints.gridx = 1;
constraints.gridy = 3;
constraints.weightx = constraints.weighty = 3.00;
constraints.gridwidth = 2;
constraints.gridheight = 1;
this.add(z, constraints);
}
public static void main( String ... args ) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame= null;
frame = new mwe();
frame.pack();
frame.setVisible(true);
}
});
}
}
上面的代码是错误的。您不能将组件直接“添加”到JScrollPane
而是将组件添加到JScrollPane
的JViewport
这可以通过执行以下任一操作来实现:
JScrollPane pane= new JScrollPane();
pane.add(textArea);
将文本区域添加到视口,或
JScrollPane pane= new JScrollPane(textArea);