gpt4 book ai didi

java - JFrame 中没有显示任何内容

转载 作者:行者123 更新时间:2023-12-01 18:28:33 24 4
gpt4 key购买 nike

我想创建一个 gui,它在顶部有两个水平组件(一个组合框和一个按钮),在底部我想添加几个组件。我创造了这样的一切:

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;

public class minimumExample extends JFrame {

private JButton addItem;

private JComboBox itemBox;

private String[] itemSelect = { "test1", "test2" };

private JPanel addUpperPane;

private JPanel addLowerPane;


public void createControlPane() {

setLayout(new BorderLayout());

addUpperPane = new JPanel(new BorderLayout(5, 5));
addLowerPane = new JPanel(new GridLayout(0, 1));

addItem = new JButton("Add item");

itemBox = new JComboBox(itemSelect);

addItem.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
getContentPane().setLayout(new GridLayout(0, 1));

if(itemBox.getSelectedItem().toString().equals("test1")) {
addLowerPane.add(new Button("Lolonator"));
validate();
repaint();

}

}
});;

addUpperPane.add(itemBox);
addUpperPane.add(addItem);
addUpperPane.add(new JSeparator(JSeparator.HORIZONTAL));

//put everything together

add(addUpperPane);
add(addLowerPane);

repaint();

}

private void makeLayout() {

setTitle("Test App");
setLayout(new BorderLayout());
setPreferredSize(new Dimension(1000, 500));

createControlPane();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);

}


/**
* starts the GUI
*/
public void start() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
makeLayout();
}
});
}

public static void main(String[] args) throws IOException {
minimumExample ex = new minimumExample();
ex.start();
}

}

我的问题是没有显示任何内容,而且我还认为布局不正确。有什么建议我应该改变什么来解决我的问题吗?

感谢您的回答!

更新

这是我的 gui 的简单线框图:

enter image description here

更新2

将所有内容更改为:

addUpperPane.add(itemBox, BorderLayout.EAST);
addUpperPane.add(addItem, BorderLayout.WEST);
addUpperPane.add(new JSeparator(JSeparator.HORIZONTAL));

//put everything together

add(addUpperPane, BorderLayout.NORTH);
add(addLowerPane, BorderLayout.SOUTH);

给我的是: enter image description here

有什么建议可以消除间隙吗?

最佳答案

由于您使用了 BorderLayout 您需要指定布局中每个组件的位置,您所做的只是将所有组件添加到布局的同一位置,默认情况下是中心

解决方案:

    addUpperPane.add(itemBox,BorderLayout.EAST);
addUpperPane.add(addItem,BorderLayout.WEST);
addUpperPane.add(new JSeparator(JSeparator.HORIZONTAL));

//put everything together

add(addUpperPane,BorderLayout.NORTH);
add(addLowerPane,BorderLayout.SOUTH);

此外,自 setLayout(new BorderLayout()); 起,JFrame 的默认布局已经是 BorderLayout,因此无需再次设置布局。

编辑:

如果您希望组件并排放置,那么 FlowLayout 就是正确的选择:

addUpperPane = new JPanel(); //default component of JPanel is FlowLayout
addUpperPane.add(itemBox);
addUpperPane.add(addItemT);

编辑编号 2:

问题:

    getContentPane().setLayout(new GridLayout(0, 1)); //remove it

示例:

addItem.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

if(itemBox.getSelectedItem().toString().equals("test1")) {
addLowerPane.add(new Button("Lolonator"));
revalidate();
}

}
});;

关于java - JFrame 中没有显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25154064/

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