gpt4 book ai didi

java - 更改 GUI 窗口大小

转载 作者:行者123 更新时间:2023-12-02 06:41:05 27 4
gpt4 key购买 nike

问题和疑问在第50-51行:

package exercise1;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class MainFrame extends JFrame {

// -------------------------------------------------------------------------

public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.pack();
frame.setVisible(true);
}

public MainFrame() {
this.setTitle("Exercise 1");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(300, 200);
this.getContentPane().setPreferredSize(new Dimension(400, 150));
this.getContentPane().setLayout(null);
this.initContent();
}

// -------------------------------------------------------------------------

private final JButton btnCombine = new JButton();

private void initContent() {
this.add(btnTest);
btnTest.setText("Change Size");
btnTest.setSize(100, 25);
btnTest.setLocation(150, 100);
btnTest.addActionListener(action);
}

// -------------------------------------------------------------------------

private final Controller action = new Controller();

private class Controller implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnTest) {
//CHANGE THE WINDOWS SIZE HERE;
MainFrame.getContentPane().setPreferredSize(new Dimension(100, 200));
}
}
}
}

如果我有这样的代码,我如何更改窗口的大小?

有一个条件:我想在单击按钮时更改其大小。在此示例中:我单击按钮 btnTest,窗口的大小将更改为任何其他大小。

谢谢! :)

最佳答案

我决定,与其进一步批评已接受的答案,不如展示我的意思(“把你的代码放在你想说的地方”)。有关更多详细信息,请参阅源代码中的评论。

Big Small

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

public class MainFrame extends JFrame {

JButton btnTest;
JPanel btnContainer;

// ---------------------------------------------------------------

public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
JFrame frame = new MainFrame();
frame.pack();
frame.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}

public MainFrame() {
this.setTitle("Exercise 1");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.setLocation(300, 200); BETTER TO..
this.setLocationByPlatform(true);
// THESE NUMBERS ARE NOT MUCH BETTER THAN 'MAGIC NUMBERS'
//this.getContentPane().setPreferredSize(new Dimension(400, 150));
// DON'T DO THIS - IT WILL CAUSE MORE PROBLEMS THAN IT FIXES
//this.getContentPane().setLayout(null);
this.initContent();
}

// ---------------------------------------------------------------

private final JButton btnCombine = new JButton();

private void initContent() {
btnTest = new JButton("Change Size");
//btnTest.setSize(100, 25); DON'T GUESS COMPONENT SIZES!
//btnTest.setLocation(150, 100); ADD A BORDER INSTEAD!
// WE ACTUALLY ADD THE BORDER TO A CONTAINER THAT HOLDS THE BUTTON.
// THIS WAY IT RETAINS THE USUAL BORDERS ON FOCUS, PRESS ETC.
btnContainer = new JPanel(new GridLayout());
btnContainer.add(btnTest);
btnContainer.setBorder(new EmptyBorder(100,150,100,150));
btnTest.addActionListener(action);
add(btnContainer);
}

// ---------------------------------------------------------------

private final Controller action = new Controller();

private class Controller implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnTest) {
//CHANGE THE WINDOWS SIZE HERE;
btnContainer.setBorder(new EmptyBorder(30,20,30,20));
MainFrame.this.pack();
}
}
}
}
<小时/>

一般提示

第二点在上面的源码中实现。第一个留给读者作为练习。

  1. 不要扩展框架或其他顶层容器。相反,创建并使用一个实例。
  2. Java GUI 可能必须在多种平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于元件的精确放置。要组织组件以获得强大的 GUI,请使用布局管理器,或 combinations of them ,以及 white space 的布局填充和边框。

    Java GUI 可能必须在多种平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于元件的精确放置。要组织组件以获得强大的 GUI,请使用布局管理器,或 combinations of them 1,以及 white space 的布局填充和边框2



关于java - 更改 GUI 窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19133276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com