我正在尝试使用飞机座椅系统关闭窗格,因此每位乘客只选择1个座位。我研究并知道我需要一行代码JFrame.dispose();但是我不知道该把它放在哪里以及还有什么可以放的。思考? (除此之外,我是一个完整的菜鸟XD)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class APlaneJToggle {
private int rows = 15;
private int columns = 6;
private Icon res = (UIManager.getIcon("OptionPane.errorIcon"));
public APlaneJToggle() {
JPanel panel = new JPanel(new GridLayout(rows, columns));
for (int row = 0; row < rows; row++) {
String []rowChar = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for (int column = 1; column < columns+1; column++) {
final JToggleButton button = new JToggleButton(rowChar[row] + column);
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent actionEvent) {
AbstractButton abstractButton = (AbstractButton) actionEvent.getSource();
boolean selected = abstractButton.getModel().isSelected();
if (selected) {
button.setIcon(res);
} else {
button.setIcon(null);
}
}
});
panel.add(button);
}
}
final JFrame frame = new JFrame("Flight");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.pack();
frame.setLocation(300, 100);
frame.resize(750,450);
frame.isDefaultLookAndFeelDecorated();
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
APlaneJToggle aPlaneJToggle = new APlaneJToggle();
}
});
}
}
答案 0 :(得分:2)
建议:
例如(迟到总比没有好)
import java.awt.*;
import java.awt.Dialog.ModalityType;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
@SuppressWarnings("serial")
public class APlaneJToggleTest extends JPanel {
private DefaultListModel<String> seatListModel = new DefaultListModel<>();
private JList<String> selectedSeatList = new JList<>(seatListModel);
private JButton getSeatSelectionBtn = new JButton(new GetSelectionAction("Get Selected Button"));
private JDialog getSeatDialog;
private APlaneJToggle aPlaneJToggle = new APlaneJToggle();
public APlaneJToggleTest() {
selectedSeatList.setVisibleRowCount(8);
String prototype = String.format("%20s", " ");
selectedSeatList.setPrototypeCellValue(prototype);
add(getSeatSelectionBtn);
add(new JScrollPane(selectedSeatList));
}
private class GetSelectionAction extends AbstractAction {
public GetSelectionAction(String name) {
super(name);
int mnemonic = (int) name.charAt(0);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
if (getSeatDialog == null) {
Window win = SwingUtilities.getWindowAncestor(APlaneJToggleTest.this);
getSeatDialog = new JDialog(win, "Choose Seat", ModalityType.APPLICATION_MODAL);
getSeatDialog.add(aPlaneJToggle.getMainPanel());
getSeatDialog.setResizable(false);
getSeatDialog.pack();
}
getSeatDialog.setVisible(true);
ButtonModel model = aPlaneJToggle.getSelectedModel();
if (model != null) {
String actionCommand = model.getActionCommand();
seatListModel.addElement(actionCommand);
aPlaneJToggle.clear();
}
}
}
private static void createAndShowGui() {
APlaneJToggleTest mainPanel = new APlaneJToggleTest();
JFrame frame = new JFrame("APlaneJToggleTest");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class APlaneJToggle {
private int rows = 15;
private int columns = 6;
private Icon res = (UIManager.getIcon("OptionPane.errorIcon"));
private Icon blankIcon;
private ButtonGroup buttonGroup = new ButtonGroup();
private JPanel panel = new JPanel(new BorderLayout());
public APlaneJToggle() {
int bi_width = res.getIconWidth();
int bi_height = res.getIconHeight();
BufferedImage blankImg = new BufferedImage(bi_width, bi_height,
BufferedImage.TYPE_INT_ARGB);
blankIcon = new ImageIcon(blankImg);
JPanel buttonPanel = new JPanel(new GridLayout(rows, columns));
for (int row = 0; row < rows; row++) {
String[] rowChar = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z" };
for (int column = 1; column < columns + 1; column++) {
String text = rowChar[row] + column;
final JToggleButton button = new JToggleButton(text, blankIcon);
button.setActionCommand(text);
buttonGroup.add(button);
button.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Icon icon = e.getStateChange() == ItemEvent.SELECTED ? res
: blankIcon;
((AbstractButton) e.getSource()).setIcon(icon);
}
});
buttonPanel.add(button);
}
}
JButton selectionButton = new JButton(new DisposeAction("Make Selection"));
JPanel bottomPanel = new JPanel();
bottomPanel.add(selectionButton);
panel.add(buttonPanel, BorderLayout.CENTER);
panel.add(bottomPanel, BorderLayout.PAGE_END);
}
public void clear() {
ButtonModel model = buttonGroup.getSelection();
if (model != null) {
model.setEnabled(false);
}
buttonGroup.clearSelection();
}
public ButtonModel getSelectedModel() {
return buttonGroup.getSelection();
}
public JPanel getMainPanel() {
return panel;
}
private class DisposeAction extends AbstractAction {
public DisposeAction(String name) {
super(name);
int mnemonic = (int) name.charAt(0);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
Component comp = (Component) e.getSource();
Window win = SwingUtilities.getWindowAncestor(comp);
win.dispose();
}
}
}
答案 1 :(得分:1)
您可以使用SwingUtilities.getWindowAncestor
返回组件所在的Window
,这样您就可以dispose
返回结果。
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private int rows = 15;
private int columns = 6;
public TestPane() {
setLayout(new GridLayout(rows, columns));
for (int row = 0; row < rows; row++) {
String[] rowChar = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
for (int column = 1; column < columns + 1; column++) {
final JToggleButton button = new JToggleButton(rowChar[row] + column);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
AbstractButton abstractButton = (AbstractButton) actionEvent.getSource();
boolean selected = abstractButton.getModel().isSelected();
if (selected) {
button.setText("X");
} else {
button.setText("");
}
SwingUtilities.getWindowAncestor(button).dispose();
}
});
add(button);
}
}
}
}
}
您可以考虑使用JDialog
代替JFrame
,因为它可以让您更好地控制程序流程。有关详细信息,请查看How to Make Dialogs
答案 2 :(得分:0)
如果您想关闭该应用程序,您还可以使用System
类。
System.exit(0);
答案 3 :(得分:0)
在 Netbeans 中: -