1

这是我需要完成的第二个学校作业。下面是任务信息。

创建一个带有两个按钮的框架,分别称为 Expand 和 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 );
}

}
4

2 回答 2

2
  1. 我不知道你为什么需要使用Double这个,double会更好。
  2. 在 Event Dispatching Thread 的上下文中创建你的框架(查看Initial Threads了解详细信息
  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 回答
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 回答