gpt4 book ai didi

java - 如何使用 removeAll() 从 JFrame 中删除所有组件?

转载 作者:行者123 更新时间:2023-12-04 04:48:03 24 4
gpt4 key购买 nike

所以我想从我的 JFrame 中删除所有内容当一个字符串等于某个值,但是当我调用 removeAll();后跟 revalidate();repaint(); ,它不会改变任何东西。

我试过调用getContentPane.removeAll();按照指示here ,但这并没有做任何事情。

我的代码如下:

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

public class MTGSAMPServerReference extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private static JList list1;
private static JButton select1;
public static String selectionMenu = "Main";

public MTGSAMPServerReference() {
this.getContentPane().setLayout(new FlowLayout(FlowLayout.LEADING));
Object[]mainMenu = {"Vehicles", "Bikes/Bicycles", "Boats", "Houses", "Businesses", "Objects", "Jobs", "Ranks", "Licenses", "VIP", "FAQ's"};
Object[]VehiclesValueMenu = {"Lower Class", "Upper Class", "VIP"};
if ("Main".equals(selectionMenu)) {
JPanel controls = new JPanel(new BorderLayout(5,5));
list1 = new JList<Object>(mainMenu);
list1.setVisibleRowCount(10);
select1 = new JButton("Select");
select1.addActionListener(this);
controls.add(new JScrollPane(list1));
controls.add(select1, BorderLayout.PAGE_END);
controls.setBorder(new EmptyBorder(25,25,0,0));
add(controls);
revalidate();
repaint();
}
if ("VehiclesValue".equals(selectionMenu)) {
removeAll();
revalidate();
repaint();
}

}

@Override
public void actionPerformed(ActionEvent e) {
if ("Main".equals(selectionMenu)) {
if (e.getActionCommand().equals("Select")) {
int indexMain = list1.getSelectedIndex();
System.out.println("Index Selected: " + indexMain);
String valueMain = (String) list1.getSelectedValue();
System.out.println("Value Selected: " + valueMain);
if ("Vehicles".equals(valueMain)) {
selectionMenu = "VehiclesValue";
System.out.println("Menu selected: " + selectionMenu);
revalidate();
repaint();
}
}
}
}

public void createAndShowGUI() {
JFrame f = new MTGSAMPServerReference();
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//f.add(new drawOnPanel());
f.setSize(1200, 800);
f.setLocationRelativeTo(null);
list1.setSize(250, 250);
list1.setLocation(0, 0);
select1.setSize(75, 25);
select1.setLocation(251, 276);
MTGSAMPServerReference.this.repaint();
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
MTGSAMPServerReference gui = new MTGSAMPServerReference();
gui.createAndShowGUI();
}
});
}
}

我已经完成了我的研究,但无法弄清楚我做错了什么。

如果我尝试更改我的 JFrame f to a Global Variable instead of a Local Variable ,它没有显示任何开始。

是的,我知道我是 mixing Commmand Line with GUI , 但那是 only for debugging purposes .完成后,我将简单地删除所有内容 Command Line related .

无论如何,对我的问题有什么想法吗?

并提前感谢!

最佳答案

这是一个使用 CardLayout 的示例它取消了 static变量并通过 setter 和 getter 提供对某些内部值的访问,以进行演示

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

public class MTGSAMPServerReference extends JFrame implements ActionListener {

private JList list1;
private JButton select1;
private String selectionMenu;
private JPanel mainMenuPane;
private JPanel vehicleMenuPane;

public MTGSAMPServerReference(String selectionMenu) {
this.getContentPane().setLayout(new FlowLayout(FlowLayout.LEADING));
Object[] mainMenu = {"Vehicles", "Bikes/Bicycles", "Boats", "Houses", "Businesses", "Objects", "Jobs", "Ranks", "Licenses", "VIP", "FAQ's"};
Object[] VehiclesValueMenu = {"Lower Class", "Upper Class", "VIP"};

mainMenuPane = new JPanel(new BorderLayout(5, 5));
list1 = new JList<Object>(mainMenu);
list1.setVisibleRowCount(10);
select1 = new JButton("Select");
select1.addActionListener(this);
mainMenuPane.add(new JScrollPane(list1));
mainMenuPane.add(select1, BorderLayout.PAGE_END);
mainMenuPane.setBorder(new EmptyBorder(25, 25, 0, 0));

vehicleMenuPane = new JPanel();
vehicleMenuPane.add(new JLabel("Vehicle"));

CardLayout cl = new CardLayout();
setLayout(cl);
add("main", mainMenuPane);
add("vehicle", vehicleMenuPane);

cl.show(getContentPane(), "main");

setSelectionMenu(selectionMenu);

}

public String getSelectionMenu() {
return selectionMenu;
}

public void setSelectionMenu(String value) {
if (selectionMenu == null ? value != null : !selectionMenu.equals(value)) {
selectionMenu = value;
updateMenu();
}
}

protected void updateMenu() {
CardLayout cl = (CardLayout) getContentPane().getLayout();
if ("Main".equals(selectionMenu)) {
cl.show(getContentPane(), "main");
} else if ("VehiclesValue".equals(selectionMenu)) {
cl.show(getContentPane(), "vehicle");
}
}

@Override
public void actionPerformed(ActionEvent e) {
if ("Main".equals(selectionMenu)) {
if (e.getActionCommand().equals("Select")) {
int indexMain = list1.getSelectedIndex();
System.out.println("Index Selected: " + indexMain);
String valueMain = (String) list1.getSelectedValue();
System.out.println("Value Selected: " + valueMain);
if ("Vehicles".equals(valueMain)) {
setSelectionMenu("VehiclesValue");
System.out.println("Menu selected: " + selectionMenu);
}
}
} else {
setSelectionMenu("Main");
}
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
MTGSAMPServerReference gui = new MTGSAMPServerReference("Main");
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.pack();
gui.setLocationRelativeTo(null);
gui.setVisible(true);
}
});
}
}

关于java - 如何使用 removeAll() 从 JFrame 中删除所有组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17880134/

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