Java 固定GridBagLayout中JTextPane的宽度
我有一个小组:Java 固定GridBagLayout中JTextPane的宽度,java,swing,layout,jtextpane,gridbaglayout,Java,Swing,Layout,Jtextpane,Gridbaglayout,我有一个小组: public class MyPanel extends JPanel { public MyPanel() { super(); this.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); JTable leftTable = new JTable(); gbc.fill
public class MyPanel extends JPanel {
public MyPanel() {
super();
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
JTable leftTable = new JTable();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.1;
gbc.weighty = 1.0;
add(leftTable, gbc);
JTextPane textPane = new JTextPane();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 0.4;
gbc.weighty = 1.0;
add(textPane, gbc);
JTable rightTable = new JTable();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 2;
gbc.gridy = 0;
gbc.weightx = 0.5;
gbc.weighty = 1.0;
add(rightTable, gbc);
}
}
然后,当我在JTextPane中输入一些字符时,它会自动调整大小。在文本窗格的同一行上有200个字符,因此2个JTables不再可见
如何确定JTextPane的宽度
谢谢。只需使用gbc.fill=GridBagConstraints.NONE;对于JTextPane,只需使用gbc.fill=GridBagConstraints.NONE;对于JTextPane,我最后使用了from
在我测试过的所有情况下,调整大小、空/满组件等都更容易预测
注意,您必须显式调用getTableHeader,因为JTables不直接在JScrollPane中
谢谢。最后我用了一个from
在我测试过的所有情况下,调整大小、空/满组件等都更容易预测
注意,您必须显式调用getTableHeader,因为JTables不直接在JScrollPane中
谢谢。@StanislavL做到了:gbc.fill=gridbagsconstraints.VERTICAL;gbc.weightx=0.0;但当我输入时,我的JTextPane仍然调整了大小。我仍然不知道如何确定它的宽度。@MarcdeVerdelhan:那么做一件事,将您的JTextPane添加到JScrollPane中,并将这个JScrollPane与JTable.Erf放在一起。我不能那样做。MyPanel已在JScrollPane组件中。我希望这3个组件—2个jtables和jscrollpane—能够同步,这样我就不能在JTextPane中使用独立的组件了。请您提供一些代码片段,以说明您计划如何进行?这可能会有所帮助。如果您不使用GridBagLayout,而是使用GridBagLayout并将这三个放在JScrollPane中,会怎么样?既然这三个维度都是相同的,那么这难道没有任何帮助吗?@StanislavL这样做了:gbc.fill=GridBagConstraints.VERTICAL;gbc.weightx=0.0;但当我输入时,我的JTextPane仍然调整了大小。我仍然不知道如何确定它的宽度。@MarcdeVerdelhan:那么做一件事,将您的JTextPane添加到JScrollPane中,并将这个JScrollPane与JTable.Erf放在一起。我不能那样做。MyPanel已在JScrollPane组件中。我希望这3个组件—2个jtables和jscrollpane—能够同步,这样我就不能在JTextPane中使用独立的组件了。请您提供一些代码片段,以说明您计划如何进行?这可能会有所帮助。如果您不使用GridBagLayout,而是使用GridBagLayout并将这三个放在JScrollPane中,会怎么样?既然这三个物体的尺寸都相同,这难道没有任何帮助吗?GBL中的重量只用于剩余空间。除非重写该行为,否则JTextPane将要求有足够的空间来显示其中的所有文本,因此只有在显示所有文本后,才会考虑权重。如果JTables也有内容,那么布局的行为是否得体?您希望布局的行为如何?您可以在JTextPane上使用setPreferredSize来“修复”大小,但如果可能,应该避免这样做。GBL中的权重将仅用于剩余空间。除非重写该行为,否则JTextPane将要求有足够的空间来显示其中的所有文本,因此只有在显示所有文本后,才会考虑权重。如果JTables也有内容,那么布局的行为是否得体?您希望布局的行为如何?您可以在JTextPane上使用setPreferredSize来“修复”大小,但如果可能的话,应该避免这样做。很高兴知道您以某种方式将其排序为+1:-很高兴知道您以某种方式将其排序为+1:-
private void initItemsPanel() {
JPanel itemsPanel = new JPanel();
itemsPanel.setLayout(new FormLayout("left:pref, fill:400px, pref:grow", "fill:20px, fill:4px, fill:max(20px;pref)"));
CellConstraints cc = new CellConstraints();
// the left table
JTable leftTable = new JTable();
itemsPanel.add(leftTable.getTableHeader(), cc.xywh(1, 1, 1, 2));
itemsPanel.add(leftTable, cc.xywh(1, 3, 1, 1));
// the text pane
itemsPanel.add(new JTextPane(), cc.xywh(2, 2, 1, 2));
// the right table
JTable rightTable = new JTable();
rightTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
itemsPanel.add(rightTable.getTableHeader(), cc.xywh(3, 1, 1, 2));
itemsPanel.add(rightTable, cc.xywh(3, 3, 1, 1));
// Adding the items panel to dialog panel
JScrollPane itemsScrollPane = new JScrollPane(itemsPanel);
itemsScrollPane.getVerticalScrollBar().setUnitIncrement(3);
dialogPanel.add(itemsScrollPane, BorderLayout.CENTER); // with dialogPanel previously instantiated
}