原文: http://zetcode.com/gui/jrubyswing/dialogs/

在 JRuby Swing 编程教程的这一部分中,我们将使用对话框。

对话框窗口或对话框是大多数现代 GUI 应用必不可少的部分。 对话被定义为两个或更多人之间的对话。 在计算机应用中,对话框是一个窗口,用于与应用“对话”。 对话框用于输入数据,修改数据,更改应用设置等。对话框是用户与计算机程序之间进行通信的重要手段。

MessageDialog

消息框是方便的对话框,可向应用的用户提供消息。 该消息由文本和图像数据组成。

  1. #!/usr/local/bin/jruby
  2. # ZetCode JRuby Swing tutorial
  3. #
  4. # This program demonstrates
  5. # message dialogs.
  6. #
  7. # author: Jan Bodnar
  8. # website: www.zetcode.com
  9. # last modified: December 2010
  10. include Java
  11. import java.awt.GridLayout
  12. import javax.swing.JFrame
  13. import javax.swing.JButton
  14. import javax.swing.JPanel
  15. import javax.swing.JOptionPane
  16. class Example < JFrame
  17. def initialize
  18. super "Message boxes"
  19. self.initUI
  20. end
  21. def initUI
  22. panel = JPanel.new
  23. panel.setLayout GridLayout.new 2, 2
  24. errorButton = JButton.new "Error"
  25. errorButton.addActionListener do |e|
  26. JOptionPane.showMessageDialog panel, "Could not open file",
  27. "Error", JOptionPane::ERROR_MESSAGE
  28. end
  29. warningButton = JButton.new "Warning"
  30. warningButton.addActionListener do |e|
  31. JOptionPane.showMessageDialog panel, "A deprecated call",
  32. "Warning", JOptionPane::WARNING_MESSAGE
  33. end
  34. questionButton = JButton.new "Question"
  35. questionButton.addActionListener do |e|
  36. JOptionPane.showMessageDialog panel, "Are you sure to quit?",
  37. "Question", JOptionPane::QUESTION_MESSAGE
  38. end
  39. informButton = JButton.new "Information"
  40. informButton.addActionListener do |e|
  41. JOptionPane.showMessageDialog panel, "Download completed",
  42. "Information", JOptionPane::INFORMATION_MESSAGE
  43. end
  44. panel.add errorButton
  45. panel.add warningButton
  46. panel.add questionButton
  47. panel.add informButton
  48. self.add panel
  49. self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
  50. self.setSize 300, 200
  51. self.setLocationRelativeTo nil
  52. self.setVisible true
  53. end
  54. end
  55. Example.new

我们使用GridLayout管理器来设置四个按钮的网格。 每个按钮显示一个不同的消息框。

  1. errorButton.addActionListener do |e|
  2. JOptionPane.showMessageDialog panel, "Could not open file",
  3. "Error", JOptionPane::ERROR_MESSAGE
  4. end

如果按下错误按钮,则会显示错误对话框。 我们使用showMessageDialog方法在屏幕上显示对话框。 此方法的第一个参数是面板,在其中显示对话框。 第二个参数是要显示的消息。 第三个参数是对话框的标题。 最后一个参数是消息类型。 默认图标由消息类型决定。 在本例中,错误对话框的消息类型为ERROR_MESSAGE

JRuby Swing 中的对话框 - 图1

图:错误消息 dialog

JFileChooser

JFileChooser对话框允许用户从文件系统中选择一个文件。

  1. #!/usr/local/bin/jruby
  2. # ZetCode JRuby Swing tutorial
  3. #
  4. # In this program, we use a JFileChooser
  5. # to load a c file.
  6. #
  7. # author: Jan Bodnar
  8. # website: www.zetcode.com
  9. # last modified: December 2010
  10. include Java
  11. import java.awt.BorderLayout
  12. import java.awt.Color
  13. import javax.swing.JFrame
  14. import javax.swing.JButton
  15. import javax.swing.JPanel
  16. import javax.swing.JToolBar
  17. import javax.swing.JFileChooser
  18. import javax.swing.JTextArea
  19. import javax.swing.JTextPane
  20. import javax.swing.JScrollPane
  21. import javax.swing.BorderFactory
  22. import javax.swing.filechooser::FileNameExtensionFilter
  23. class Example < JFrame
  24. def initialize
  25. super "FileChooser"
  26. self.initUI
  27. end
  28. def initUI
  29. @panel = JPanel.new
  30. @panel.setLayout BorderLayout.new
  31. toolbar = JToolBar.new
  32. openb = JButton.new "Choose file"
  33. openb.addActionListener do |e|
  34. chooseFile = JFileChooser.new
  35. filter = FileNameExtensionFilter.new "c files", "c"
  36. chooseFile.addChoosableFileFilter filter
  37. ret = chooseFile.showDialog @panel, "Choose file"
  38. if ret == JFileChooser::APPROVE_OPTION
  39. file = chooseFile.getSelectedFile
  40. text = self.readFile file
  41. @area.setText text.to_s
  42. end
  43. end
  44. toolbar.add openb
  45. @area = JTextArea.new
  46. @area.setBorder BorderFactory.createEmptyBorder 10, 10, 10, 10
  47. pane = JScrollPane.new
  48. pane.getViewport.add @area
  49. @panel.setBorder BorderFactory.createEmptyBorder 10, 10, 10, 10
  50. @panel.add pane
  51. self.add @panel
  52. self.add toolbar, BorderLayout::NORTH
  53. self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
  54. self.setSize 450, 400
  55. self.setLocationRelativeTo nil
  56. self.setVisible true
  57. end
  58. def readFile file
  59. filename = file.getCanonicalPath
  60. f = File.open filename, "r"
  61. text = IO.readlines filename
  62. return text
  63. end
  64. end
  65. Example.new

在我们的代码示例中,我们使用JFileChooser对话框选择一个 C 文件并将其内容显示在JTextArea中。

  1. @area = JTextArea.new

这是JTextArea,我们将在其中显示所选文件的内容。

  1. chooseFile = JFileChooser.new
  2. filter = FileNameExtensionFilter.new "c files", "c"
  3. chooseFile.addChoosableFileFilter filter

我们创建JFileChooser对话框的实例。 我们创建一个仅显示 C 文件的过滤器。

  1. ret = chooseFile.showDialog @panel, "Choose file"

对话框显示在屏幕上。 我们得到了返回值。

  1. if ret == JFileChooser::APPROVE_OPTION
  2. file = chooseFile.getSelectedFile
  3. text = self.readFile file
  4. @area.setText text.to_s
  5. end

如果用户选择了文件,我们将获得文件名。 阅读其内容并将文本设置为文本区域组件。

  1. def readFile file
  2. filename = file.getCanonicalPath
  3. f = File.open filename, "r"
  4. text = IO.readlines filename
  5. return text
  6. end

此代码从文件中读取文本。 getCanonicalPath返回绝对文件名。

JRuby Swing 中的对话框 - 图2

图:JFileChooser

在 JRuby Swing 教程的这一部分中,我们使用了对话框窗口。