2016-09-02 11 views
-1

私はJavaのスイングを用いたアルゴリズムのビジュアライザを構築していると私は、特定の要素JLabelの/ JPanelの

int arr[]={6,3,2,13,4}; 
then 
JLabel1.setSize(10, arr[0]*5); 
JLabel2.setSize(10, arr[1]*5); 
JLabel3.setSize(10, arr[2]*5); 
JLabel4.setSize(10, arr[3]*5); 
JLabel5.setSize(10, arr[4]*5); 

へのJLabelの高さを設定したいを使用してグラフを描画するが、私はサイズ、ラベルを設定するとき下に広げて倒立した棒グラフを作成する。 jLabelsの下部の配置を維持しながら、どのように高さを増やすことができますか?

The output after setting the values to jlabel

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     abc = new JLabel[]{one,two,three,four,five}; //JlabelArray 

     int p = Integer.parseInt(abc[0].getText()); 
     int q = Integer.parseInt(abc[1].getText()); 
     int r = Integer.parseInt(abc[2].getText()); 
     int s = Integer.parseInt(abc[3].getText()); 
     int t = Integer.parseInt(abc[4].getText()); 



     one.setSize(20, p*10); 
     one.setBackground(Color.decode("#03A9F4")); 
     two.setSize(20, q*10); 
     two.setBackground(Color.decode("#03A9F4")); 
     three.setSize(20, r*10); 
     three.setBackground(Color.decode("#03A9F4")); 
     four.setSize(20, s*10); 
     four.setBackground(Color.decode("#03A9F4")); 
     five.setSize(20, t*10); 
     five.setBackground(Color.decode("#03A9F4")); 

     arr = new int[]{p,q,r,s,t}; //number array to be sorted 

    } 

Q設定するためのソースコード:私はJLabelのからのsetSize場合、通常、それは底部に向かって成長します。正のy方向の高さをどのように増やすことができますか?

+1

1)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)ASCIIアート、またはGUIの*意図された*レイアウトの簡単な図を最小サイズで提供し、サイズ変更可能な場合は幅と高さを増やします。 –

+0

ラベルの場所を決定するコードの部分も投稿してください。 – Berger

+2

'Draw a Graph'このような別個のコンポーネントを使用するかどうかはわかりません。単一のJPanelを使用し、[カスタムペイント](https://docs.oracle.com/javase/tutorial/uiswing/painting/)を使用することを検討してください。 )。代わりに、グラフライブラリー([JFreeChart](http://www.jfree.org/jfreechart/)など) – copeg

答えて

1

JLabelを追加するパネル上で、別のレイアウトマネージャを使用してください - 私はGridBagLayoutを提案します。それを正しくするのは苦労ですが、理解すれば、コンポーネントをレイアウトするのにはかなり柔軟です。あなたのために私が試してみた:

JPanel pane = new JPanel(new GridBagLayout()); 

GridBagConstants c = new GridBagConstants; 

c.gridheight = REMAINDER; 
c.gridwidth = 1; 
c.fill  = NONE; 
c.anchor  = SOUTHWEST; 
c.weightx = 1; 
c.weighty = 0; 

pane.add(label1, c); 
pane.add(label2, c); 
pane.add(label3, c); 

c.gridwidth = RELATIVE; 

pane.add(label4, c); 

c.gridwidth = REMAINDER; 

pane.add(label5, c); 
-1

別のオプションを異なるLayoutManagerのほか全くのLayoutManager(JPanel.setLayout(null))ではありません。このようにして、パネルの子コンポーネントは自動的にリサイズ/移動されません。また、パネルの子コンポーネントのサイズやサイズを自分で設定する必要があります。これは、固定サイズのコンテナに適しています。このような解決策は、以下のようになります。

pane.setLayout(null); 

pane.add(label1); 
label1.setBounds(label1X, label1Y, label1Width, label1Height); 

これはまた、コンポーネントがコンテナのサイズ変更に対応していないことを意味することに注意してください - それが必要な場合は、(おそらくカスタム)LayoutManagerが良いオプションです。

+2

*「別のLayoutManager以外にも、LayoutManagerはありません。」*これはオプションですが、初心者にお勧めするものではありません。理由を理解するまで、レイアウトアドバイスの提供を中止してください。初心者がGUIをレイアウトするのに十分なスキルを持つ頃には、通常、そのロジックをカスタムレイアウトマネージャーに入れることができます。 –

関連する問題