gpt4 book ai didi

java - 在 Pane 仍在运行的情况下更改发送到 JOptionPane 的 JPanel 的布局

转载 作者:行者123 更新时间:2023-12-01 13:47:01 25 4
gpt4 key购买 nike

尝试在 JOptionPane 打开时更改其外观,具体取决于用户单击的单选按钮。我究竟做错了什么?例如,如果我添加一个按钮并将 JLabel 从窗口的一侧移动到另一侧,它就会完美地工作。

import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import static javax.swing.JOptionPane.*;

public class ChangePanel extends JFrame{

private JButton click = new JButton("CLICK ME!");

ChangePanel(){
add(click, BorderLayout.SOUTH);
click.addActionListener(new ButtonListen());

setVisible(true);
setSize(300,100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

public class ButtonListen implements ActionListener{
public void actionPerformed(ActionEvent e){

PopUpPanel pop = new PopUpPanel();
showConfirmDialog(ChangePanel.this, pop, "Changeable", OK_CANCEL_OPTION);
}
}
//Send this as Parameter to the ConfirmDialog
public class PopUpPanel extends JPanel implements ActionListener{
JRadioButton jewelry = new JRadioButton("Jewelry");
JRadioButton shares = new JRadioButton("Shares");
JRadioButton machine = new JRadioButton("Machine");

PopUpPanel(){

setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
ButtonGroup bg = new ButtonGroup();
JPanel north = new JPanel();
bg.add(jewelry);
jewelry.addActionListener(this);
bg.add(shares);
shares.addActionListener(this);
bg.add(machine);
machine.addActionListener(this);
north.add(jewelry);
north.add(shares);
north.add(machine);
add(north);
}
//Listener for RadioButtons
public void actionPerformed(ActionEvent e){
JTextField info1Txt = new JTextField(12);
JTextField info2Txt = new JTextField(12);
JTextField info3Txt = new JTextField(3);;

JRadioButton b = (JRadioButton)e.getSource();

if(b.getText().equals("Jewelry")){
//Dummy test text
System.out.println("Jewelry");

JPanel info1 = new JPanel();
info1.add(new JLabel("info1:"));
info1.add(info1Txt);
add(info1);

JPanel info2 = new JPanel();
info2.add(new JLabel("info2:"));
info2.add(info2Txt);
add(info2);

JPanel info3 = new JPanel();
info3.add(new JLabel("info3:"));
info3.add(info3Txt);
add(info3);

validate();
repaint();

}else if(b.getText().equals("Shares")){
//Dummy test text
System.out.println("Shares");
}else
//Dummy test text
System.out.println("Machine");
}
}
public static void main(String[] args){
new ChangePanel();
}

}

最佳答案

当您使用 BoxLayout 时,您应该向 PopUpPanel 面板提供尺寸提示,而您尚未提供该提示。

BoxLayout 从上到下布置组件时,它会尝试按照组件的首选高度调整每个组件的大小。如果布局的垂直空间与首选高度的总和不匹配,则 BoxLayout 会尝试调整组件大小以填充空间。组件会增大或缩小以填充空间,而 BoxLayout 会遵循每个组件的最小和最大尺寸。

查看官方教程页面讨论:BoxLayout Feature

关于java - 在 Pane 仍在运行的情况下更改发送到 JOptionPane 的 JPanel 的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20291828/

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