为啥我的组件超出边界,请帮助我将其与必要的代码对齐
Posted
技术标签:
【中文标题】为啥我的组件超出边界,请帮助我将其与必要的代码对齐【英文标题】:Why does my components go out of boundaries, please help me to align it with the necessary code为什么我的组件超出边界,请帮助我将其与必要的代码对齐 【发布时间】:2014-03-29 07:29:34 【问题描述】: import net.java.dev.designgridlayout.Tag;
import net.java.dev.designgridlayout.DesignGridLayout;
import javax.swing.table.DefaultTableModel;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
class alignmentprob
JFrame JF;
Container C,C5;
JDesktopPane JDP;
JInternalFrame JIF5;
JLabel i5l1,i5l2,i5l3,i5l4,i5l5,i5l6,i5l7;
JTextField i5t1,i5t2,i5t3;
JComboBox<String> i5cb1;
JButton i5b1,i5b2,i5b3;
JSeparator i5sep1,i5sep2,i5sep3,i5sep4,i5sep5,i5sep6;
JTable i5Table1;
DefaultTableModel i5Model;
String[] i5Credit = "A","B";
String[] i5ColumnNames = "Name","Qty","Rate/kg","rate/dzn","total amt.";
JScrollPane i5t1sp1;
public alignmentprob()
JF = new JFrame();
JDP = new JDesktopPane();
JF.setVisible(true);
JF.setSize(800,600);
JIF5 = new JInternalFrame("Daily Analysis",true,true, true, true);
C=JF.getContentPane();
C.add(JDP,BorderLayout.CENTER);
JIF5.setVisible(true);
JIF5.setBounds(10, 10, 600, 500);
C5 = JIF5.getContentPane();
DesignGridLayout layout5 = new DesignGridLayout(C5);
i5l1 = new JLabel("FREIGHT DETAILS");
i5l2 = new JLabel("Date : ");
i5l3 = new JLabel("SALE DETAILS");
i5l4 = new JLabel("Cash Sales : Rs. ");
i5l5 = new JLabel("Credit : ");
i5l6 = new JLabel("EXPENSES");
i5l7 = new JLabel("Food & Tea : Rs. ");
i5t1 = new JTextField(20);
i5t2 = new JTextField(20);
i5t3 = new JTextField(20);
i5cb1 = new JComboBox<String>(i5Credit);
i5b1 = new JButton("Save");
i5b2 = new JButton("Reset");
i5b3 = new JButton("Close");
i5sep1 = new JSeparator();
i5sep2 = new JSeparator();
i5sep3 = new JSeparator();
i5sep4 = new JSeparator();
i5sep5 = new JSeparator();
i5sep6 = new JSeparator();
i5Model = new DefaultTableModel(i5ColumnNames,5);
i5Table1 =new JTable(i5Model)@Override
public boolean isCellEditable(int arg0, int arg1)
return false;
;
i5t1sp1 = new JScrollPane(i5Table1);
layout5.row().left().add(i5sep1).fill().withOwnRowWidth();
layout5.row().center().add(i5l1);
layout5.row().left().add(i5sep2).fill().withOwnRowWidth();
layout5.row().grid(i5l2).add(i5t1);
layout5.row().left().add(i5sep3).fill().withOwnRowWidth();
layout5.row().center().add(i5l3);
layout5.row().left().add(i5sep4).fill().withOwnRowWidth();
layout5.row().grid(i5l4).add(i5t2);
layout5.row().grid(i5l5).add(i5cb1);
layout5.row().left().add(i5t1sp1);
layout5.row().left().add(i5sep5).fill().withOwnRowWidth();
layout5.row().center().add(i5l6);
layout5.row().left().add(i5sep6).fill().withOwnRowWidth();
layout5.row().grid(i5l7).add(i5t3);
layout5.row().center().add(i5b1).add(i5b2).add(i5b3);
JDP.add(JIF5);
public static void main(String args[])
new alignmentprob();
我的问题是文本字段太长并且超出范围。我制作的表格由 5 行组成,但它往往会占用更多空间。我实际上想将 FREIGHT DETAILS 和 SALES DETAILS 平行对齐,使用垂直线分隔。请帮我编写代码来完成所有这些操作,以便我的表单看起来整洁且完全可见。
【问题讨论】:
好吧,就像我上次说的那样。为了尽快获得更好的帮助,请发布MCTaRE(最小完整测试和可读示例)。 我已经从代码中跳过了一些行,并且我只是包含了理解代码的最小细节,如果我跳过更多,我想你不会理解我的问题。 我想你不会理解我的问题。 == 我对您的代码的第 5 个问题之一(请确保我不等待任何解释)如何定义 layout5 和 C5 之间的一致性,您的意思是@Andrew Thompson 在这里通过要求发布来嘲笑或贬低您的问题重复一个 SSCCE/MCVE/MCTaRE @dic19 对于 JInternalFrame 应该是正确的 @mKorbel 注意到了!问题不存在,甚至在发布的代码中也不存在,因为我已经对其进行了测试(之前的调整),没有任何问题。 【参考方案1】:我的问题是文本字段太长而且超出范围。
根据您发布的代码,我无法重现该问题。也许还有其他我没有看到的东西导致了这种行为。
我实际上想将 FREIGHT DETAILS & SALES DETAILS 对齐 平行,用垂直线分隔。
即使在使用第三方布局管理器(例如 DesignGridLayout)时,您也可以按照 Nested Layout 的方法使用 JPanel
对货运详细信息和销售详细信息组件进行分组。
关于垂直分隔符,不要以为DesignGridLayout可以。虽然您可以拥有跨越多行的组件,但它不适用于 JSeparator
。
请帮我写代码来完成这一切,让我的表单看起来很整洁 并且完全可见。
*** 不是代码工厂,因此在大多数情况下,人们不会为您完成工作,但他们可以提供有用的示例。但是,由于我必须复制所有代码来测试它,并且我使用嵌套布局方法进行了一些更改,所以我将在这里例外。希望对您有所帮助:
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import net.java.dev.designgridlayout.DesignGridLayout;
public class Demo
private void createAndShowGUI()
JLabel i5l1 = new JLabel("FREIGHT DETAILS");
JLabel i5l2 = new JLabel("Date : ");
JLabel i5l3 = new JLabel("Vehicle No. : ");
JLabel i5l4 = new JLabel("From : ");
JLabel i5l5 = new JLabel("Item : ");
JLabel i5l6 = new JLabel("Quantity : ");
JLabel i5l7 = new JLabel("Kg.");
JLabel i5l8 = new JLabel("Rate : Rs.");
JLabel i5l15 = new JLabel("SALE DETAILS");
JLabel i5l16 = new JLabel("Cash Sales : Rs. ");
JLabel i5l17 = new JLabel("Credit : Rs. ");
JLabel i5l18 = new JLabel("EXPENSES");
JLabel i5l19 = new JLabel("Food & Tea : Rs. ");
JLabel i5l20 = new JLabel("Wages : Rs. ");
JLabel i5l21 = new JLabel("Miscellaneous Expenses : Rs. ");
JTextField i5t1 = new JTextField(20);
JTextField i5t2 = new JTextField(20);
JTextField i5t3 = new JTextField(20);
JTextField i5t4 = new JTextField(20);
JTextField i5t11 = new JTextField(20);
JTextField i5t12 = new JTextField(20);
JTextField i5t13 = new JTextField(20);
JTextField i5t14 = new JTextField(20);
JComboBox i5cb1 = new JComboBox<>();
JComboBox i5cb2 = new JComboBox<>();
JComboBox i5cb3 = new JComboBox<>();
JButton i5b1 = new JButton("Save");
JButton i5b2 = new JButton("Reset");
JButton i5b3 = new JButton("Close");
JSeparator i5sep1 = new JSeparator();
JSeparator i5sep2 = new JSeparator();
JSeparator i5sep3 = new JSeparator();
JSeparator i5sep4 = new JSeparator();
JSeparator i5sep5 = new JSeparator();
JSeparator i5sep6 = new JSeparator();
Object[] columnNames = new Object[]"Column # 1", "Column # 2", "Column # 3", "Column # 4";
DefaultTableModel model = new DefaultTableModel(columnNames, 10);
JTable table = new JTable(model);
JScrollPane i5t1sp1 = new JScrollPane(table);
JPanel freightPanel = new JPanel();
DesignGridLayout layout1 = new DesignGridLayout(freightPanel);
layout1.row().left().add(i5sep1).fill().withOwnRowWidth();
layout1.row().center().add(i5l1);
layout1.row().left().add(i5sep2).fill().withOwnRowWidth();
layout1.row().grid(i5l2).add(i5t1);
layout1.row().grid(i5l3).add(i5t2);
layout1.row().grid(i5l4).add(i5cb1);
layout1.row().grid(i5l5).add(i5cb2);
layout1.row().grid(i5l6).add(i5t3).add(i5l7);
layout1.row().grid(i5l8).add(i5t4);
layout1.row().left().add(i5sep5).fill().withOwnRowWidth();
layout1.row().center().add(i5l18);
layout1.row().left().add(i5sep6).fill().withOwnRowWidth();
layout1.row().grid(i5l19).add(i5t12);
layout1.row().grid(i5l20).add(i5t13);
layout1.row().grid(i5l21).add(i5t14);
JPanel salePanel = new JPanel();
DesignGridLayout layout2 = new DesignGridLayout(salePanel);
layout2.row().left().add(i5sep3).fill().withOwnRowWidth();
layout2.row().center().add(i5l15);
layout2.row().left().add(i5sep4).fill().withOwnRowWidth();
layout2.row().grid(i5l16).add(i5t11);
layout2.row().grid(i5l17).add(i5cb3);
layout2.row().grid().add(i5t1sp1);
JInternalFrame internalFrame = new JInternalFrame("Daily Analysis",true,true, true, true);
DesignGridLayout mainLayout = new DesignGridLayout(internalFrame.getContentPane());
mainLayout.row().grid().add(freightPanel).add(salePanel);
mainLayout.row().left().add(new JSeparator()).fill().withOwnRowWidth();
mainLayout.row().center().add(i5b1).add(i5b2).add(i5b3);
internalFrame.pack();
internalFrame.setVisible(true);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(internalFrame);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
public static void main(String[] args)
SwingUtilities.invokeLater(new Runnable()
@Override
public void run()
new Demo().createAndShowGUI();
);
截图
【讨论】:
这个答案很有帮助,但我可以知道为什么创建的表需要这么多空间吗?为什么表格不是其单元格的大小。?非常感谢您抽出宝贵的时间。 :) 不客气!关于您的问题,它与首选的可滚动视口大小以及布局管理器如何处理此首选大小有关。如果你想减少桌子的高度,你应该寻找setPreferredScrollableViewportSize()。还可以查看How a Scroll Pane works 以更好地了解此问题。 @汤姆斯以上是关于为啥我的组件超出边界,请帮助我将其与必要的代码对齐的主要内容,如果未能解决你的问题,请参考以下文章