1

これは、私が完了する必要がある 2 番目の学校の課題です。以下、課題情報です。

Expand と Shrink という 2 つのボタンがあるフレームを作成します。Expand ボタンをクリックすると、フレームが 10% 拡大されます。[縮小] ボタンをクリックすると、フレームが 10% 縮小されます。setSize() を使用して actionPerformed() メソッドでこれを行います。int 型の 2 つのインスタンス変数を使用して、フレームの現在のサイズを追跡します。それらを 10% ずつ増やしたり減らしたりする場合は、整数演算を使用するか、型キャストを使用する必要があります。

すでにフレームとボタンが設定されています。もちろん、オンライン調査からですが、私はそれを正しく理解できません。元。縮小ボタンをクリックするたびに内側のフレームが縮小し、拡張も同じでした(フレーム内で拡張されました)。コードを見てください。ところで、より少ないコードでフレームとボタンを作成するためのより良い方法を教えてください。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Expandshrink extends JFrame implements ActionListener
{
JButton expand;
JButton shrink;
Double w = 300.0, l = 200.0;

Expandshrink(String title)
{  
expand = new JButton("Expand");
shrink = new JButton("Shrink");

expand.setActionCommand("expand");
shrink.setActionCommand("shrink");

expand.addActionListener(this);
shrink.addActionListener(this);

setLayout(new FlowLayout());

add(expand);
add(shrink);

setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );  
}

public void actionPerformed(ActionEvent evt)
{

try
{
  if (evt.getActionCommand().equals("expand"))
  {
    w = w*1.1;
    l = l*1.1;
  }
  else if (evt.getActionCommand().equals("shrink"))
  {
    w = w*0.9;
    l = l*0.9;
  }
  getContentPane().setSize(w.intValue(),l.intValue());
}
catch ( Exception ex )
{ 
} 
}

public static void main ( String[] args )
{
Expandshrink frm = new Expandshrink("Expand & Shrink");

frm.setSize( 300, 200 );    
frm.setVisible( true );
}

}
4

2 に答える 2

2

変化する:

getContentPane().setSize(w.intValue(),l.intValue());

に:

// layout managers are more likely to honor the preferred size
//getContentPane().setSize(w.intValue(),l.intValue());
getContentPane().setPreferredSize(new Dimension(w.intValue(),l.intValue()));
Expandshrink.this.pack();
于 2013-03-19T04:25:49.527 に答える
2
  1. Doubleなぜこれを使用する必要があるのか​​ わかりませんがdouble、それ以上にうまくいくでしょう。
  2. イベント ディスパッチ スレッドのコンテキスト内でフレームを作成します (詳細については、初期スレッドを参照してください)。
  3. コンテンツ ペインのサイズを変更しても効果はありません。実際には、フレーム自体のサイズを変更する必要があります。
  4. とにかく拡張しているのでJFrame、コンストラクター内でフレームを初期化するように努力する必要があります(たとえば、初期サイズを設定します)

あなたmainのメソッドはもっと似ているはずです...

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            }

            Expandshrink frm = new Expandshrink("Expand & Shrink");
        }
    });
}
于 2013-03-19T04:15:59.840 に答える