有没有办法在模式对话框中创建 JList?
Is there a way to create a JList in a modal dialog?
我有一个 JFrame
已经可见。用户可以加载保存的会话。
想法是创建一个 JList
,以便用户可以加载所选会话并更新框架。
下面的代码获取字符串列表并将它们添加到列表中。
DefaultListModel model = new DefaultListModel();
JList list=new JList(model);
JScrollPane pane = new JScrollPane(list);
try {
for (String part : Utils.getSessions()) {
model.addElement(part);
}
} catch (IOException e1) {
e1.printStackTrace();
}
下一步:显示步骤。
我发现了什么:将窗格添加到当前框架
我的希望:在模态对话框中显示列表
有没有办法在模态对话框中创建 JList
?
您可以使用 JOptionPane
的功能来显示任何组件。使用
JOptionPane.showMessageDialog(frame, list);
获取显示您的 JList
的模式对话框。您可以通过添加更多参数来进一步自定义此对话框,有关详细信息,请参阅 here。
完整示例:
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
String[] options = new String[] {"a", "b", "c"};
JList<String> list = new JList<>(options);
// Shows the dialog
JOptionPane.showMessageDialog(frame, list);
// Do whatever you want with the selection, for example
frame.add(new JLabel(list.getSelectedValue()));
frame.pack();
事实证明 JOptionPane
已经内置了列表选择,无需使用您自己的 JList
。
调用方法如下:JOptionPane.showInputDialog
这是一个非常简单的例子:Displaying a dialog with a list of choices
这是一个可以让您选择字体名称的完整示例(使用 Andrew 在评论中提供的便捷字体列表片段)。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class ListChooserDemo extends JFrame {
JTextPane textPane = new JTextPane();
String lastChoice = null;
public ListChooserDemo() {
setTitle("List Chooser Demo");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(new Dimension(500, 500));
add(new JScrollPane(textPane), BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout());
add(buttonPanel, BorderLayout.SOUTH);
JButton b = new JButton("Choose it!");
textPane.setText("Click the button...");
b.addActionListener(this::doChooseFont);
buttonPanel.add(b);
}
public void doChooseFont(ActionEvent e) {
// a handy way to get a nontrivial list of choices for a demo
String[] choices = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
// Show a list of options with no effort on our part.
String input = (String) JOptionPane.showInputDialog(
this, // optional reference to frame/window or null
"Choose a font...", // prompt displayed over list
"Font Chooser", // title
JOptionPane.QUESTION_MESSAGE, // message style
null, // Use default icon for message style
choices, // array of choices
lastChoice); // initial choice or null
if (input == null) {
// Handle case when user canceled, didn't select anything, or hit escape
textPane.setText(textPane.getText() + "\r\nCanceled!");
} else {
// Do stuff that happens when a selection was made
textPane.setText(textPane.getText() + "\r\nSelected " + input);
lastChoice = input;
}
}
public static final void main(String[] args) {
// Run in GUI thread
SwingUtilities.invokeLater(() -> {
ListChooserDemo frame = new ListChooserDemo();
// Center in screen and show
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(dim.width / 2 - frame.getSize().width / 2, dim.height / 2 - frame.getSize().height / 2);
frame.setVisible(true);
});
}
}
我有一个 JFrame
已经可见。用户可以加载保存的会话。
想法是创建一个 JList
,以便用户可以加载所选会话并更新框架。
下面的代码获取字符串列表并将它们添加到列表中。
DefaultListModel model = new DefaultListModel();
JList list=new JList(model);
JScrollPane pane = new JScrollPane(list);
try {
for (String part : Utils.getSessions()) {
model.addElement(part);
}
} catch (IOException e1) {
e1.printStackTrace();
}
下一步:显示步骤。
我发现了什么:将窗格添加到当前框架
我的希望:在模态对话框中显示列表
有没有办法在模态对话框中创建 JList
?
您可以使用 JOptionPane
的功能来显示任何组件。使用
JOptionPane.showMessageDialog(frame, list);
获取显示您的 JList
的模式对话框。您可以通过添加更多参数来进一步自定义此对话框,有关详细信息,请参阅 here。
完整示例:
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
String[] options = new String[] {"a", "b", "c"};
JList<String> list = new JList<>(options);
// Shows the dialog
JOptionPane.showMessageDialog(frame, list);
// Do whatever you want with the selection, for example
frame.add(new JLabel(list.getSelectedValue()));
frame.pack();
事实证明 JOptionPane
已经内置了列表选择,无需使用您自己的 JList
。
调用方法如下:JOptionPane.showInputDialog
这是一个非常简单的例子:Displaying a dialog with a list of choices
这是一个可以让您选择字体名称的完整示例(使用 Andrew 在评论中提供的便捷字体列表片段)。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class ListChooserDemo extends JFrame {
JTextPane textPane = new JTextPane();
String lastChoice = null;
public ListChooserDemo() {
setTitle("List Chooser Demo");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(new Dimension(500, 500));
add(new JScrollPane(textPane), BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout());
add(buttonPanel, BorderLayout.SOUTH);
JButton b = new JButton("Choose it!");
textPane.setText("Click the button...");
b.addActionListener(this::doChooseFont);
buttonPanel.add(b);
}
public void doChooseFont(ActionEvent e) {
// a handy way to get a nontrivial list of choices for a demo
String[] choices = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
// Show a list of options with no effort on our part.
String input = (String) JOptionPane.showInputDialog(
this, // optional reference to frame/window or null
"Choose a font...", // prompt displayed over list
"Font Chooser", // title
JOptionPane.QUESTION_MESSAGE, // message style
null, // Use default icon for message style
choices, // array of choices
lastChoice); // initial choice or null
if (input == null) {
// Handle case when user canceled, didn't select anything, or hit escape
textPane.setText(textPane.getText() + "\r\nCanceled!");
} else {
// Do stuff that happens when a selection was made
textPane.setText(textPane.getText() + "\r\nSelected " + input);
lastChoice = input;
}
}
public static final void main(String[] args) {
// Run in GUI thread
SwingUtilities.invokeLater(() -> {
ListChooserDemo frame = new ListChooserDemo();
// Center in screen and show
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(dim.width / 2 - frame.getSize().width / 2, dim.height / 2 - frame.getSize().height / 2);
frame.setVisible(true);
});
}
}