【问题标题】:JTabbedPane, Jpanel and GridbaglayoutJTabbedPane、Jpanel 和 Gridbaglayout
【发布时间】:2014-09-01 19:08:52
【问题描述】:

我想用JPanelGridBaglayout 为单独的项目创建一个JTabbedPane,但每次JTabbedPane 的第二个选项卡都会错误我的文本字段对象...

那是我的动物注册类,扩展类和主类 问题出在第二个表格的文本字段中。

代码,只有问题......

代码:

public class Cad_Animals extends Register_Screen{
    JTextField number = new JTextField(10);
    JTextField name = new JTextField(30);
    JTabbedPane pane1 = new JTabbedPane(1);
    JTabbedPane pane2 = new JTabbedPane(1);

    JTextField race = new JTextField(10);
    JTextField proprietario = new JTextField(10);
    JPanel jl1 = new JPanel();
    JPanel jl2 = new JPanel();

    JTextField father = new JTextField(10);
    JTextField mother = new JTextField(10);

    public Cad_Animals(){
        super("Animal Register");
        jl1.setLayout(new GridBagLayout());
        jl2.setLayout(new GridBagLayout());
        addComponent(1, 1, 1, 1, number,jl1);
        addComponent(2, 1, 1, 1, name,jl2);

        addComponent(3, 1, 1, 1, proprietario,jl1);
        addComponent(2, 1, 1, 1, race,jl2);
        addComponent(6, 1, 1, 1, father,jl1);
        addComponent(7, 1, 1, 1, mother,jl1);


        //pane1.addTab("table1", jl2);
        //pane2.addTab("table2", jl1);

        //addComponent(8, 1, 6, 6, pane1,1);
       // addComponent(8, 2, 3, 3, pane2,1);

        //painels("new2",jl2);
        //painels("new2", jl1);

        pack();
    } 
}

.

    public class Register_Screen extends JFrame {

    JTabbedPane la = new JTabbedPane();

    public Register_Screen(String titulo) {
        super(titulo);
        getContentPane().setLayout(new BorderLayout());     

        setVisible(true);
        pack();

    }

        public void addComponent(int line, int column, int height, int width, JComponent component,JComponent compnum) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridy = line;
        gbc.gridx = column;
        gbc.gridheight = 1; //1
        gbc.gridwidth = 1; //1
        gbc.anchor = GridBagConstraints.WEST;
        gbc.insets = new Insets(1, 5, 3, 5);
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;



        gbc.gridx++;
        gbc.gridheight = height;
        gbc.gridwidth = width;
        //jpCampos.add(component, gbc);
        compnum.add(component, gbc);

        getContentPane().add(la);


        la.addTab("West",compnum);
        //jtpTabs.add("asdsa",jpCampos);            
    }
}

.

  public class MainClass {
      public static void main(String args[]) throws InterruptedException{
     try {
            UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Não foi possivel Carregar NimbusLookandFeel");
        }
        Cad_Animals cad = new Cad_Animals();

【问题讨论】:

  • 如果这是我的问题并且我在这里寻求帮助,我会花一点时间创建并发布minimal example program,因为我知道这是最好和最快的方法让人们充分了解我的问题,然后帮助我。
  • CALL_TEST 似乎没有我可以看到的布局管理器
  • 为了其他人的理智,请关注Java coding convention
  • 是一个边框布局...

标签: java swing layout-manager gridbaglayout jtabbedpane


【解决方案1】:

猜测:

您没有设置 GridBagConstraint 的 weightx 或 weighty,因此您的 GridBagConstraints 的默认值为 0.0,这会将您的所有组件聚集到中心。考虑将 weightx 和 weighty 约束字段的值设为 1.0。

即,

gbc.gridy = line;
gbc.gridx = column;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets(1, 5, 3, 5);

// ***** add these two lines
gbc.weightx = 1.0;
gbc.weighty = 1.0;

如果这个答案没有帮助,那么我支持我在对您的原始问题的评论中提出的建议,即您需要一些时间来创建和发布 minimal example program

【讨论】:

  • 我这样做,但只对齐 cmets,而不是文本字段。
  • @SamuelRonha:那么是时候创建并发布您的mcve了。
  • @SamuelRonha:也许有人会有时间完成你的整个项目,但我没有时间,因为我有工作/家庭/生活义务要处理。你明白我们都是志愿者,对吧?如果您需要我的进一步帮助,您应该更加努力地创建和发布您的最小程序。请查看链接,因为它有助于您了解我们需要什么。
  • @SamuelRonha Hovercraft 想说的是,创建一个新项目,从您的原始项目中取出所有不必要的代码,它应该用更少的代码来证明问题,你可以发布 here 在 StackOverflow 上,避免与整个项目的外部链接
  • 顺便说一句,如果@HovercraftFullOfEels 的答案不是适合或解决您的问题的答案,请不要接受它,因为它不会出现在问题列表中并且没有更多人会看到这个问题,所以你不会有答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
相关资源
最近更新 更多