返回介绍

Dialogs in JRuby Swing

发布于 2025-02-22 22:19:50 字数 6885 浏览 0 评论 0 收藏 0

In this part of the JRuby Swing programming tutorial, we will work with dialogs.

Dialog windows or dialogs are an indispensable part of most modern GUI applications. A dialog is defined as a conversation between two or more persons. In a computer application a dialog is a window which is used to "talk" to the application. A dialog is used to input data, modify data, change the application settings etc. Dialogs are important means of communication between a user and a computer program.

Message boxes

Message boxes are convenient dialogs that provide messages to the user of the application. The message consists of text and image data.

#!/usr/local/bin/jruby

# ZetCode JRuby Swing tutorial
# 
# This program demonstrates
# message dialogs.
# 
# author: Jan Bodnar
# website: www.zetcode.com
# last modified: December 2010


include Java

import java.awt.GridLayout
import javax.swing.JFrame
import javax.swing.JButton
import javax.swing.JPanel
import javax.swing.JOptionPane


class Example < JFrame
  
  def initialize
    super "Message boxes"
    
    self.initUI
  end
    
  def initUI
    
    panel = JPanel.new
    panel.setLayout GridLayout.new 2, 2

    errorButton = JButton.new "Error"
    errorButton.addActionListener do |e|
      JOptionPane.showMessageDialog panel, "Could not open file",
        "Error", JOptionPane::ERROR_MESSAGE
    end
    
    warningButton = JButton.new "Warning"
    warningButton.addActionListener do |e|
      JOptionPane.showMessageDialog panel, "A deprecated call",
        "Warning", JOptionPane::WARNING_MESSAGE
    end
    
    questionButton = JButton.new "Question"
    questionButton.addActionListener do |e|
      JOptionPane.showMessageDialog panel, "Are you sure to quit?",
        "Question", JOptionPane::QUESTION_MESSAGE
    end
    
    informButton = JButton.new "Information"
    informButton.addActionListener do |e|
      JOptionPane.showMessageDialog panel, "Download completed",
        "Information", JOptionPane::INFORMATION_MESSAGE
    end
  
    panel.add errorButton
    panel.add warningButton
    panel.add questionButton
    panel.add informButton

    self.add panel    
    
    
    self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
    self.setSize 300, 200
    self.setLocationRelativeTo nil
    self.setVisible true
  end
end

Example.new

We use the GridLayout manager to set up a grid of four buttons. Each of the buttons shows a different message box.

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

In case we pressed the error button, we show the error dialog. We use the showMessageDialog method to show the dialog on the screen. The first parameter of this method is the panel, in which the dialog is displayed. The second parameter is the message to be displayed. The third parameter is the title of the dialog. The final parameter is the message type. The default icon is determined by the message type. In our case, we have ERROR_MESSAGE message type for the error dialog.

Error message dialog
Figure: Error message dialog

JFileChooser

JFileChooser dialog allows user to select a file from the filesystem.

#!/usr/local/bin/jruby

# ZetCode JRuby Swing tutorial
# 
# In this program, we use a JFileChooser
# to load a c file.
# 
# author: Jan Bodnar
# website: www.zetcode.com
# last modified: December 2010


include Java

import java.awt.BorderLayout
import java.awt.Color
import javax.swing.JFrame
import javax.swing.JButton
import javax.swing.JPanel
import javax.swing.JToolBar
import javax.swing.JFileChooser
import javax.swing.JTextArea
import javax.swing.JTextPane
import javax.swing.JScrollPane
import javax.swing.BorderFactory
import javax.swing.filechooser::FileNameExtensionFilter


class Example < JFrame
  
  def initialize
    super "FileChooser"
    
    self.initUI
  end
    
  def initUI
    
    @panel = JPanel.new
    @panel.setLayout BorderLayout.new

    toolbar = JToolBar.new
    openb = JButton.new "Choose file"
    openb.addActionListener do |e|
      chooseFile = JFileChooser.new
      filter = FileNameExtensionFilter.new "c files", "c"
      chooseFile.addChoosableFileFilter filter

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

      if ret == JFileChooser::APPROVE_OPTION
        file = chooseFile.getSelectedFile
        text = self.readFile file
        @area.setText text.to_s   
      end
    end

    toolbar.add openb

    @area = JTextArea.new
    @area.setBorder BorderFactory.createEmptyBorder 10, 10, 10, 10

    pane = JScrollPane.new
    pane.getViewport.add @area

    @panel.setBorder BorderFactory.createEmptyBorder 10, 10, 10, 10
    @panel.add pane
    self.add @panel

    self.add toolbar, BorderLayout::NORTH
    
    self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
    self.setSize 450, 400
    self.setLocationRelativeTo nil
    self.setVisible true
  end
  
  def readFile file
    
    filename = file.getCanonicalPath
    f = File.open filename, "r"
    text = IO.readlines filename
    return text
  end  
end

Example.new

In our code example, we use the JFileChooser dialog to select a C file and display its contents in a JTextArea .

@area = JTextArea.new

This is the JTextArea in which we will show the contents of a selected file.

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

We create an instance of the JFileChooser dialog. We create a filter which will show only C files.

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

The dialog is shown on the screen. We get the return value.

if ret == JFileChooser::APPROVE_OPTION
  file = chooseFile.getSelectedFile
  text = self.readFile file
  @area.setText text.to_s   
end

If the user has selected a file, we get the name of the file. Read its contents and set the text to the text area component.

def readFile file
  
  filename = file.getCanonicalPath
  f = File.open filename, "r"
  text = IO.readlines filename
  return text
end   

This code reads the text from the file. The getCanonicalPath returns an absolute file name.

JFileChooser
Figure: JFileChooser

In this part of the JRuby Swing tutorial, we worked with dialog windows.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文