Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以表格格式组织动态大小的面板(Java SWING)_Java_Swing_Layout Manager_Gridbaglayout - Fatal编程技术网

以表格格式组织动态大小的面板(Java SWING)

以表格格式组织动态大小的面板(Java SWING),java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我一直在尝试使用GridBagLayout来组织一组面板(包含一组标签,这些标签可以改变面板的大小,大部分是垂直的)。我选择这个的主要原因是因为面板的大小可能会有很大的不同,我希望面板在框架大小改变时能够缩放 我经常遇到各种各样的问题,从不同尺寸的面板(通过面板上的边框检查)、奇怪的尺寸问题、无法使面板垂直粘贴(面板之间的巨大空间) Gridbag似乎是最好的选择,但它似乎比我想象的更痛苦。更改帧大小时,还有哪些选项可以提供适当的缩放?我很久以前就喜欢上了。下面的代码片段让您了解了如何完成下面显

我一直在尝试使用GridBagLayout来组织一组面板(包含一组标签,这些标签可以改变面板的大小,大部分是垂直的)。我选择这个的主要原因是因为面板的大小可能会有很大的不同,我希望面板在框架大小改变时能够缩放

我经常遇到各种各样的问题,从不同尺寸的面板(通过面板上的边框检查)、奇怪的尺寸问题、无法使面板垂直粘贴(面板之间的巨大空间)

Gridbag似乎是最好的选择,但它似乎比我想象的更痛苦。更改帧大小时,还有哪些选项可以提供适当的缩放?

我很久以前就喜欢上了。下面的代码片段让您了解了如何完成下面显示的GUI

    frame.add(menu,             new GBConstraints( 0, 0).spanX(32).fill(HORIZONTAL));
    frame.add(new JLabel("Available letters"), 
                                new GBConstraints( 0, 1).insets( 2, 2, 0, 2));
    frame.add(new JLabel("Play by play..."), 
                                new GBConstraints( 2, 1).insets( 0, 5, 0, 0));
    frame.add(pnlPlays,         new GBConstraints( 2, 1).insets(10, 0, 0, 0).spanY(14).anchor(WEST).fill(BOTH));//.ipad(0,0));

    frame.add(pnlAvail,         new GBConstraints( 0, 2).insets(0, 5, 5, 5));
    frame.add(pnlLegend,        new GBConstraints( 1, 2)                    .spanY(14)              .fill(BOTH));
    frame.add(pnlBonuses,       new GBConstraints( 0, 3).insets(0, 100, 0, 0));
    frame.add(pnlSBBonuses,     new GBConstraints( 0, 3).insets(0, 125, 0, 0));
    frame.add(gamePanel,        new GBConstraints( 0, 5).insets(0, 50, 0, 0));
    frame.add(pnlTheScore,      new GBConstraints( 0, 5)                                .anchor(EAST));
    btnDebug.setPreferredSize(new Dimension(1, 1));
    frame.add(btnDebug,         new GBConstraints( 0, 0)                                .anchor(WEST));

    frame.add(btnNextReplayStep,new GBConstraints( 0, 6).insets(0,310, 0, 0)            .anchor(CENTER));
              btnNextReplayStep.setVisible(false);
    frame.add(new JLabel("User letters"),
                                new GBConstraints( 0, 6).insets(0,240, 30, 0));
    frame.add(btnCopyUser,      new GBConstraints( 0, 6).insets(0,310,0,0)              .anchor(CENTER));

    frame.add(btnCopyAllLetters,new GBConstraints( 0, 6)                                .anchor(EAST));
    frame.add(pnlNotes,         new GBConstraints( 0, 6).insets(25,10,10, 10).spanY(  2).anchor(WEST));
    frame.add(btnClearMnemHi,   new GBConstraints( 0, 7).insets(0,430, 0, 0));
    frame.add(btnClearBorders,  new GBConstraints( 0, 7).insets(0,530, 0, 0));

我不会说谎;这仍然是一项重要任务,但如果仔细规划,在垂直和水平线上标出实际网格,以显示字段必须跨越多少列,那么值得一试。很有可能@Hovercraft的建议会更好

(我还没有掌握它,奇怪的
insets
值似乎表明了这一点。但它是一个漂亮、可靠的GUI。)

编辑

下面是执行上述代码之前如何创建两个
JPanel
对象的代码。还可以使用
GridBagLayout
;其他人则不然。只要是最容易和最好的

  private void makePlays(){  
    pnlPlays = new JPanel(new GridBagLayout());
    pnlPlays.setSize(500,300);
    pnlPlays.add(scrPlays, new GBConstraints(0,1).span(40, 62)
                                                 .fill(BOTH).ipad(100, 50));
    scrPlays.setEnabled(false);
  }

  private void makeScoremasterBonuses(){
    BonusBackgroundColors c;
    BonusBackgroundColors all   [] = BonusBackgroundColors.values();
    String labels[] = new String[all.length];
    String abbrs [] = new String[all.length];

    JButton but;
    pnlBonuses = new JPanel();
    pnlBonuses.add(new JLabel("Legend:"));

    for (int i = 0; i < all.length; i++) {
      labels[i] = all[i].name().replace("_", " ").toLowerCase();
      abbrs [i] = Utilities.abbreviate(all[i].name());
      c = BonusBackgroundColors.values()[i];
      but = new JButton(abbrs[i]);
      but.setToolTipText(labels[i]);
      but.setBackground(c.background(c));
      but.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      but.setActionCommand("" + i);
      but.addActionListener(this);
      pnlBonuses.add(but);
    }
  }
private void makePlays(){
pnlPlays=newjpanel(newgridbaglayout());
pnlPlays.setSize(500300);
pnlPlays.add(scrPlays,新的GBConstraints(0,1).span(40,62)
.填充(两个)。ipad(100,50));
scrPlays.setEnabled(false);
}
私有void makeScoreMaster红利(){
骨背景颜色c;
BonusBackgroundColors all[]=BonusBackgroundColors.values();
字符串标签[]=新字符串[all.length];
字符串缩写[]=新字符串[all.length];
JButton但是;
pnlBonuses=新的JPanel();
pnlBonuses.add(新的JLabel(“图例”);
for(int i=0;i
很久以前,我就成了一名歌迷。下面的代码片段让您了解了如何完成下面显示的GUI

    frame.add(menu,             new GBConstraints( 0, 0).spanX(32).fill(HORIZONTAL));
    frame.add(new JLabel("Available letters"), 
                                new GBConstraints( 0, 1).insets( 2, 2, 0, 2));
    frame.add(new JLabel("Play by play..."), 
                                new GBConstraints( 2, 1).insets( 0, 5, 0, 0));
    frame.add(pnlPlays,         new GBConstraints( 2, 1).insets(10, 0, 0, 0).spanY(14).anchor(WEST).fill(BOTH));//.ipad(0,0));

    frame.add(pnlAvail,         new GBConstraints( 0, 2).insets(0, 5, 5, 5));
    frame.add(pnlLegend,        new GBConstraints( 1, 2)                    .spanY(14)              .fill(BOTH));
    frame.add(pnlBonuses,       new GBConstraints( 0, 3).insets(0, 100, 0, 0));
    frame.add(pnlSBBonuses,     new GBConstraints( 0, 3).insets(0, 125, 0, 0));
    frame.add(gamePanel,        new GBConstraints( 0, 5).insets(0, 50, 0, 0));
    frame.add(pnlTheScore,      new GBConstraints( 0, 5)                                .anchor(EAST));
    btnDebug.setPreferredSize(new Dimension(1, 1));
    frame.add(btnDebug,         new GBConstraints( 0, 0)                                .anchor(WEST));

    frame.add(btnNextReplayStep,new GBConstraints( 0, 6).insets(0,310, 0, 0)            .anchor(CENTER));
              btnNextReplayStep.setVisible(false);
    frame.add(new JLabel("User letters"),
                                new GBConstraints( 0, 6).insets(0,240, 30, 0));
    frame.add(btnCopyUser,      new GBConstraints( 0, 6).insets(0,310,0,0)              .anchor(CENTER));

    frame.add(btnCopyAllLetters,new GBConstraints( 0, 6)                                .anchor(EAST));
    frame.add(pnlNotes,         new GBConstraints( 0, 6).insets(25,10,10, 10).spanY(  2).anchor(WEST));
    frame.add(btnClearMnemHi,   new GBConstraints( 0, 7).insets(0,430, 0, 0));
    frame.add(btnClearBorders,  new GBConstraints( 0, 7).insets(0,530, 0, 0));

我不会说谎;这仍然是一项重要任务,但如果仔细规划,在垂直和水平线上标出实际网格,以显示字段必须跨越多少列,那么值得一试。很有可能@Hovercraft的建议会更好

(我还没有掌握它,奇怪的
insets
值似乎表明了这一点。但它是一个漂亮、可靠的GUI。)

编辑

下面是执行上述代码之前如何创建两个
JPanel
对象的代码。还可以使用
GridBagLayout
;其他人则不然。只要是最容易和最好的

  private void makePlays(){  
    pnlPlays = new JPanel(new GridBagLayout());
    pnlPlays.setSize(500,300);
    pnlPlays.add(scrPlays, new GBConstraints(0,1).span(40, 62)
                                                 .fill(BOTH).ipad(100, 50));
    scrPlays.setEnabled(false);
  }

  private void makeScoremasterBonuses(){
    BonusBackgroundColors c;
    BonusBackgroundColors all   [] = BonusBackgroundColors.values();
    String labels[] = new String[all.length];
    String abbrs [] = new String[all.length];

    JButton but;
    pnlBonuses = new JPanel();
    pnlBonuses.add(new JLabel("Legend:"));

    for (int i = 0; i < all.length; i++) {
      labels[i] = all[i].name().replace("_", " ").toLowerCase();
      abbrs [i] = Utilities.abbreviate(all[i].name());
      c = BonusBackgroundColors.values()[i];
      but = new JButton(abbrs[i]);
      but.setToolTipText(labels[i]);
      but.setBackground(c.background(c));
      but.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      but.setActionCommand("" + i);
      but.addActionListener(this);
      pnlBonuses.add(but);
    }
  }
private void makePlays(){
pnlPlays=newjpanel(newgridbaglayout());
pnlPlays.setSize(500300);
pnlPlays.add(scrPlays,新的GBConstraints(0,1).span(40,62)
.填充(两个)。ipad(100,50));
scrPlays.setEnabled(false);
}
私有void makeScoreMaster红利(){
骨背景颜色c;
BonusBackgroundColors all[]=BonusBackgroundColors.values();
字符串标签[]=新字符串[all.length];
字符串缩写[]=新字符串[all.length];
JButton但是;
pnlBonuses=新的JPanel();
pnlBonuses.add(新的JLabel(“图例”);
for(int i=0;i
很久以前,我就成了一名歌迷。下面的代码片段让您了解了如何完成下面显示的GUI

    frame.add(menu,             new GBConstraints( 0, 0).spanX(32).fill(HORIZONTAL));
    frame.add(new JLabel("Available letters"), 
                                new GBConstraints( 0, 1).insets( 2, 2, 0, 2));
    frame.add(new JLabel("Play by play..."), 
                                new GBConstraints( 2, 1).insets( 0, 5, 0, 0));
    frame.add(pnlPlays,         new GBConstraints( 2, 1).insets(10, 0, 0, 0).spanY(14).anchor(WEST).fill(BOTH));//.ipad(0,0));

    frame.add(pnlAvail,         new GBConstraints( 0, 2).insets(0, 5, 5, 5));
    frame.add(pnlLegend,        new GBConstraints( 1, 2)                    .spanY(14)              .fill(BOTH));
    frame.add(pnlBonuses,       new GBConstraints( 0, 3).insets(0, 100, 0, 0));
    frame.add(pnlSBBonuses,     new GBConstraints( 0, 3).insets(0, 125, 0, 0));
    frame.add(gamePanel,        new GBConstraints( 0, 5).insets(0, 50, 0, 0));
    frame.add(pnlTheScore,      new GBConstraints( 0, 5)                                .anchor(EAST));
    btnDebug.setPreferredSize(new Dimension(1, 1));
    frame.add(btnDebug,         new GBConstraints( 0, 0)                                .anchor(WEST));

    frame.add(btnNextReplayStep,new GBConstraints( 0, 6).insets(0,310, 0, 0)            .anchor(CENTER));
              btnNextReplayStep.setVisible(false);
    frame.add(new JLabel("User letters"),
                                new GBConstraints( 0, 6).insets(0,240, 30, 0));
    frame.add(btnCopyUser,      new GBConstraints( 0, 6).insets(0,310,0,0)              .anchor(CENTER));

    frame.add(btnCopyAllLetters,new GBConstraints( 0, 6)                                .anchor(EAST));
    frame.add(pnlNotes,         new GBConstraints( 0, 6).insets(25,10,10, 10).spanY(  2).anchor(WEST));
    frame.add(btnClearMnemHi,   new GBConstraints( 0, 7).insets(0,430, 0, 0));
    frame.add(btnClearBorders,  new GBConstraints( 0, 7).insets(0,530, 0, 0));

我不会说谎;这仍然是一项重要任务,但如果仔细规划,在垂直和水平线上标出实际网格,以显示字段必须跨越多少列,那么值得一试。很有可能@Hovercraft的建议会更好

(我还没有掌握它,奇怪的
insets
值似乎表明了这一点。但它是一个漂亮、可靠的GUI。)

编辑

下面是执行上述代码之前如何创建两个
JPanel
对象的代码。还可以使用
GridBagLayout
;其他人则不然。只要是最容易和最好的

  private void makePlays(){  
    pnlPlays = new JPanel(new GridBagLayout());
    pnlPlays.setSize(500,300);
    pnlPlays.add(scrPlays, new GBConstraints(0,1).span(40, 62)
                                                 .fill(BOTH).ipad(100, 50));
    scrPlays.setEnabled(false);
  }

  private void makeScoremasterBonuses(){
    BonusBackgroundColors c;
    BonusBackgroundColors all   [] = BonusBackgroundColors.values();
    String labels[] = new String[all.length];
    String abbrs [] = new String[all.length];

    JButton but;
    pnlBonuses = new JPanel();
    pnlBonuses.add(new JLabel("Legend:"));

    for (int i = 0; i < all.length; i++) {
      labels[i] = all[i].name().replace("_", " ").toLowerCase();
      abbrs [i] = Utilities.abbreviate(all[i].name());
      c = BonusBackgroundColors.values()[i];
      but = new JButton(abbrs[i]);
      but.setToolTipText(labels[i]);
      but.setBackground(c.background(c));
      but.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      but.setActionCommand("" + i);
      but.addActionListener(this);
      pnlBonuses.add(but);
    }
  }
private void makePlays(){
pnlPlays=newjpanel(newgridbaglayout());
pnlPlays.setSize(500300);
pnlPlays.add(scrPlays,新的GBConstraints(0,1).span(40,62)
.填充(两个)。ipad(100,50));
scrPlays.setEnabled(false);
}
私有void makeScoreMaster红利(){
骨背景颜色c;
BonusBackgroundColors all[]=BonusBackgroundColors.values();
字符串标签[]=新字符串[all.length];
字符串缩写[]=新字符串[all.length];