2011-06-20 9 views
1

タイトルボーダーでJPanelを取得しましたが、パネルの内容がボーダーのタイトルよりも狭く、タイトルが切り捨てられます。 hereは、幅の手動設定に注意しているJPanelにBoxLayoutを使用しています。私は、TitledBorder getMinimumSize()関数に応じてパネルの最小、最大、および優先幅を設定しようとしましたが、コンポーネントの幅はすべて機能しません。作業した唯一のものは、ボックスフィラーを使用していたが、望ましくないくぼみが入っていた。JPanel TitledBorderのタイトル切捨て - Java swing

内容に関係なく、完全なタイトルを表示する方法はありますか?

 JRadioButton jrb = new JRadioButton(); 
     int width = (int) SwingUtilities2.getFontMetrics(jrb, jrb.getFont()).getStringBounds(cat.getDescription(), null).getWidth(); 
     for (Case c : cases) { 
      JRadioButton jrbCase = new JRadioButton(); 
      jrbCase.setText(c.getDescription()); 
      jrbCase.setToolTipText(c.getText()); 
      jrbCase.setPreferredSize(new Dimension(width, jrbCase.getPreferredSize().height)); 
      bgCases.add(jrbCase); 
      jp.add(jrbCase); 
     } 
+3

早く、[SSCCE](HTTPを投稿pscode.org/sscce.html)。 –

答えて

2

。ラベルには、タイトルと同じ(またはそれ以上の)幅のスペースのみが含まれます。 (目に見えないタイトルはそれを解決しないと非常に同じテキストでラベルを作る。)

+1

上記のコードはそのまま動作しません。 BoxLayoutでは、そのようにSizeを設定しても効果はありません。しかし、JPanelにコンポーネントを追加した後にhorizo​​ntalGlueを追加すると、完全に機能します! – vkolias

0

私はパネルの上(または下)にラベル(BoxLayout.Y_AXIS)を追加することによって、それを「解決」:必要な幅を計算することについてどう

this.jpCases.setLayout(new javax.swing.BoxLayout(this.jpCases, javax.swing.BoxLayout.LINE_AXIS)); 
     List<Category> categories = db.getCategories(); 
     for (Category cat : categories) { 
      JPanel jp = new JPanel(); 
      TitledBorder tb = BorderFactory.createTitledBorder(cat.getDescription()); 

      jp.setBorder(tb); 
      jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS)); 
      jp.setAlignmentY(Component.TOP_ALIGNMENT); 
      jp.setAlignmentX(Component.LEFT_ALIGNMENT); 

      List<Case> cases = db.getCasesByCategoryId(cat.getId()); 
      for (Case c : cases) { 
       JRadioButton jrbCase = new JRadioButton(); 
       jrbCase.setText(c.getDescription()); 
       jrbCase.setToolTipText(c.getText()); 
       jrbCase.setMaximumSize(tb.getMinimumSize(jp)); 
       bgCases.add(jrbCase); 
       jp.add(jrbCase); 
      } 
     //jp.add(new Box.Filler(tb.getMinimumSize(jp), tb.getMinimumSize(jp), tb.getMinimumSize(jp))); 
      this.jpCases.add(jp); 
    } 
0

これは私に適しています://:よりよいヘルプについて

JPanel aPanel = new JPanel(){ 
     @Override 
     public Dimension getPreferredSize(){ 
      Dimension d = super.getPreferredSize(); 
      Border b = this.getBorder(); 
      if(b == null) return d; 
      if(!(b instanceof TitledBorder)) return d; 
      TitledBorder tb = (TitledBorder)b; 
      if(tb.getTitle() == null) return d; 
      int insets = 2 * (tb.getBorderInsets(this).left + tb.getBorderInsets(this).right); 
      double minWidth = this.getFontMetrics(tb.getTitleFont()).stringWidth(tb.getTitle()) + insets; 
      if(d.getWidth() > minWidth) return d; 
      return new Dimension((int)minWidth, d.height); 
     } 
}; 
関連する問題