展开和收缩按钮单击

时间:2013-03-19 04:05:34

标签: java swing

这是我需要完成的第二次学校作业。以下是作业信息。

使用两个按钮创建一个框架,名为Expand and Shrink。单击“展开”按钮时,框架将扩展10%。单击“缩小”按钮时,框架会缩小10%。使用setSize()在actionPerformed()方法中执行此操作。使用int类型的两个实例变量跟踪帧的当前大小。当你增加或减少它们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 );
}

}

2 个答案:

答案 0 :(得分:2)

  1. 我不知道为什么你需要使用Doubledouble会更好。
  2. 在事件调度线程的上下文中创建框架(有关详细信息,请查看Initial Threads
  3. 更改内容窗格的大小无效,实际上您需要更改框架本身的大小
  4. 既然你从JFrame延伸,你应该努力在构造函数中初始化框架(例如设置它的初始大小)
  5. 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");
            }
        });
    }
    

答案 1 :(得分: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();