2016-12-11 7 views
1

サイズ変更のためにBasicArrowButtonコンポーネントを取得しようとしていて、それが私の生活の中で機能するようにはできません。次のコードは問題のはるかに単純なバージョンですが、私がしようとしていることをまだ示しています。ボタンは、パネルのレイアウトをFlowLayoutに設定してJPanel内にあります。同じレイアウトでパネルに残ったままサイズを変更する必要があります。事前のおかげで、と悪いの書式設定のため申し訳ありません:BasicArrowButtonのサイズ変更

メインクラス:

package PackageMain; 

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.WindowConstants; 

public class Main { 

public static JFrame frame = new JFrame("Window"); 
public static PanelOne p1; 
public static PanelTwo p2; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frame.setBounds(100, 100, 800, 600); 
       p1 = new PanelOne(); 
       frame.setVisible(true); 
      } catch(Exception e){ 

      } 
     } 
    }); 
} 
} 

セカンドクラス:

package PackageMain; 

import java.awt.Dimension; 
import java.awt.FlowLayout; 

import javax.swing.JPanel; 
import javax.swing.plaf.basic.BasicArrowButton; 

public class PanelOne{ 

public PanelOne(){ 
    FlowLayout fl = new FlowLayout(); 
    BasicArrowButton b1 = new BasicArrowButton(BasicArrowButton.WEST); 
    JPanel p1 = new JPanel(); 
    p1.add(b1); 
    p1.setLayout(fl); 
    b1.setPreferredSize(new Dimension(100, 100)); //DOESN'T WORK! 
    Main.frame.add(p1); 

} 
} 

答えて

2

問題は、クラスBasicArrowButtonは、メソッドのgetPreferredSize()をオーバーライドすることにあります。したがって、このメソッドを尊重しないレイアウトを使用するか、このメソッドの独自の実装を提供する必要があります。

まず提案:

import java.awt.Dimension; 
import java.awt.GridLayout; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.WindowConstants; 
import javax.swing.plaf.basic.BasicArrowButton; 

public class BasicArrowButtonTest { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frm = new JFrame("Test arrow button"); 
       JPanel p = new JPanel(new GridLayout(1, 1)); 
       p.setPreferredSize(new Dimension(100, 100)); 
       p.add(new BasicArrowButton(BasicArrowButton.WEST)); 
       frm.add(p); 
       frm.pack(); 
       frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frm.setLocationRelativeTo(null); 
       frm.setVisible(true); 
      } 
     }); 
    } 
} 

第2の提案:

package org.swingsamples.label; 

import java.awt.Dimension; 
import java.awt.FlowLayout; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.WindowConstants; 
import javax.swing.plaf.basic.BasicArrowButton; 

public class BasicArrowButtonTest { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frm = new JFrame("Test arrow button"); 
       JPanel p = new JPanel(new FlowLayout()); 
       BasicArrowButton btn = new BasicArrowButton(BasicArrowButton.WEST) { 
        @Override 
        public Dimension getPreferredSize() { 
         return new Dimension(100, 100); 
        } 
       }; 
       p.add(btn); 
       frm.add(p); 
       frm.pack(); 
       frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frm.setLocationRelativeTo(null); 
       frm.setVisible(true); 
      } 
     }); 
    } 
}