Java 中文官方教程 2022 版(十五)(1)

简介: Java 中文官方教程 2022 版(十五)

文本组件 API

原文:docs.oracle.com/javase/tutorial/uiswing/components/textapi.html

本节列出了文本组件共享的常用 API 部分。这些 API 大部分由JTextComponent类定义。文本组件特性讨论了如何使用部分 API。

JComponent 类描述了文本组件从JComponent继承的 API。有关特定文本组件相关的 API 信息,请参阅该组件的操作页面:文本字段、密码字段、格式化文本字段、文本区域或编辑器窗格和文本窗格。

有关文本 API 的完整详细信息,请参阅JTextComponent的 API 文档以及text package中各种类和接口的文档。

本节列出的 API 包括以下类别:

  • 设置属性
  • 选择操作
  • 在模型和视图之间转换位置
  • 文本编辑命令
  • 表示文档的类和接口
  • 处理文档
  • 操作插入符和选择高亮器
  • 读取和写入文本

设置属性

这些方法在JTextComponent类中定义。

方法 描述
void setEditable(boolean) boolean isEditable() 设置或指示用户是否可以编辑文本组件中的文本。
void setDragEnabled(boolean) boolean getDragEnabled() 设置或获取dragEnabled属性,必须为 true 才能在此组件上启用拖放处理。默认值为 false。有关更多详细信息,请参阅拖放和数据传输。
void setDisabledTextColor(Color) Color getDisabledTextColor() 设置或获取文本组件被禁用时用于显示文本的颜色。
void setMargin(Insets) Insets getMargin() 设置或获取文本与文本组件边框之间的边距。

操作选择

这些方法在JTextComponent类中定义。

方法 描述
String getSelectedText() 获取当前选定的文本。
void selectAll() void select(int, int) 选择所有文本或选择起始和结束范围内的文本。

| void setSelectionStart(int) void setSelectionEnd(int)

int getSelectionStart()

int getSelectionEnd() | 通过索引设置或获取当前选择的范围。 |

void setSelectedTextColor(Color) Color getSelectedTextColor() 设置或获取选定文本的颜色。
void setSelectionColor(Color) Color getSelectionColor() 设置或获取选定文本的背景颜色。

在模型和视图之间转换位置

这些方法在JTextComponent类中定义。

方法 描述
int viewToModel(Point) 将视图坐标系中的指定点转换为文本中的位置。
Rectangle modelToView(int) 将文本中指定位置转换为视图坐标系中的矩形。

文本编辑命令

类或方法 描述

| void cut() void copy()

void paste()

void replaceSelection(String)

(在JTextComponent中) | 使用系统剪贴板剪切、复制和粘贴文本,或分别用参数指定的字符串替换所选文本。 |

EditorKit 提供文本组件的视图工厂、文档、插入符号和操作,以及读取和写入特定格式的文档。
DefaultEditorKit EditorKit的具体子类,提供基本的文本编辑功能。
StyledEditorKit Default EditorKit的子类,为带样式文本提供额外的编辑功能。
字符串 xxxx操作 (在DefaultEditorKit中) 默认编辑器工具支持的所有操作的名称。请参见将文本操作与菜单和按钮关联。

| 哔哔操作 复制操作

剪切操作

默认键入操作

插入换行操作

插入内容操作

插入制表符操作

粘贴操作

(在DefaultEditorKit中) | 实现各种文本编辑命令的内部类。 |

| 对齐操作 加粗操作

字体族操作

字体大小操作

前景色操作

斜体操作

样式文本操作

下划线操作

(在StyledEditorKit中) | 实现各种编辑命令以处理带样式文本的内部类。 |

Action[] getActions() (在JTextComponent中) 获取此组件支持的操作。如果组件使用编辑器工具包,则此方法从编辑器工具包获取操作数组。
InputMap getInputMap() (在JComponent中) 获取将键绑定到操作的输入映射。参见将文本操作与键绑定。
void put(KeyStroke, Object) (在InputMap中) 将指定的键绑定到指定的操作。通常通过名称指定操作,对于标准编辑操作,使用字符串常量表示,如DefaultEditorKit.backwardAction

代表文档的类和接口

接口或类 描述
文档 定义所有文档必须实现的 API 的接口。
抽象文档 Document接口的抽象超类实现。这是 Swing 文本包提供的所有文档的超类。
纯文本文档 实现Document接口的类。这是纯文本组件(文本字段、密码字段和文本区域)的默认文档。此外,在加载纯文本或未知格式的文本时,编辑器窗格和文本窗格使用此类。
样式文档 Document子接口。定义支持带样式文本的文档必须实现的 API。JTextPane要求其文档必须是这种类型。
默认样式文档 实现StyledDocument接口的类。JTextPane的默认文档。

处理文档

类或方法 描述
DocumentFilter 所有文档过滤器的超类。您可以使用文档过滤器来更改从文档中插入或移除的内容,而无需自己实现文档。参见实现文档过滤器。
void setDocumentFilter(DocumentFilter) (在AbstractDocument中) 设置文档过滤器。

| void setDocument(Document) Document getDocument() |

(在JTextComponent中) | 设置或获取文本组件的文档。|

Document createDefaultModel() (在JTextField中) 创建一个默认的 PlainDocument 模型。覆盖此方法以创建自定义文档,而不是默认的PlainDocument

| void addDocumentListener(DocumentListener) void removeDocumentListener(DocumentListener) |

(在Document中) | 添加或移除文档监听器。参见监听文档变化。|

| void addUndoableEditListener(UndoableEditListener) void removeUndoableEditListener(UndoableEditlistener) |

(在Document中) | 添加或移除可撤销编辑监听器。可撤销编辑监听器用于实现撤销和重做。|

| int getLength() Position getStartPosition() |

Position getEndPosition()

String getText(int, int) |

(在Document中) | 返回有关文档的各种描述信息的Document方法。|

| Object getProperty(Object) void putProperty(Object, Object)

(在Document中)

void setDocumentProperties(Dictionary)

Dictionary getDocumentProperties()

(在AbstractDocument中) | 一个Document维护一组属性,您可以使用这些方法来操作。 |

操纵插入符和选择高亮器

这些方法在JTextComponent类中定义。

接口、类或方法 描述
插入符 定义表示文档内插入点的对象的 API 的接口。
DefaultCaret 所有文本组件使用的默认插入符。
void setCaret(Caret) Caret getCaret() 设置或获取文本组件使用的插入符对象。
void setCaretColor(Color) Color getCaretColor() 设置或获取插入符的颜色。

| void setCaretPosition(int) void moveCaretPosition(int)

int getCaretPosition() | 设置或获取文档内插入符的当前位置。 |

void addCaretListener(CaretListener) void removeCaretListener(CaretListener) 向文本组件添加或移除插入符监听器。
NavigationFilter 所有导航过滤器的超类。导航过滤器允许您修改即将发生在文本组件中的插入符更改。
void setNavigationFilter(NavigationFilter) 将导航过滤器附加到文本组件。
Highlighter 定义用于突出显示当前选择的对象的 API 的接口。
DefaultHighlighter 所有文本组件使用的默认高亮器。
void setHighlighter(Highlighter) Highlighter getHighlighter() 设置或获取文本组件使用的高亮器。

读取和写入文本

方法 描述

| void read(Reader, Object) void write(Writer)

(在JTextComponent中) | 读取或写入文本。 |

| void read(Reader, Document, int) void read(InputStream, Document, int)

(在EditorKit中) | 从流中读取文本到文档中。 |

| void write(Writer, Document, int, int) void write(OutputStream, Document, int, int)

(在EditorKit中) | 将文本从文档写入流中。 |

如何使用各种组件

原文:docs.oracle.com/javase/tutorial/uiswing/components/componentlist.html

每个页面描述了如何使用特定类型的 Swing 组件。

  • 如何制作小程序
  • 如何使用按钮、复选框和单选按钮
  • 如何使用颜色选择器
  • 如何使用组合框
  • 如何制作对话框
  • 如何使用编辑窗格和文本窗格
  • 如何使用文件选择器
  • 如何使用格式化文本字段
  • 如何制作框架(主窗口)
  • 如何使用内部框架
  • 如何使用标签
  • 如何使用分层窗格
  • 如何使用列表
  • 如何使用菜单
  • 如何使用面板
  • 如何使用密码字段
  • 如何使用进度条
  • 如何使用根窗格
  • 如何使用滚动窗格
  • 如何使用分隔符
  • 如何使用滑块
  • 如何使用微调器
  • 如何使用分割窗格
  • 如何使用选项卡窗格
  • 如何使用表格
  • 如何使用文本区域
  • 如何使用文本字段
  • 如何使用工具栏
  • 如何使用工具提示
  • 如何使用树

如何制作 Applets

原文:docs.oracle.com/javase/tutorial/uiswing/components/applet.html

本节涵盖了JApplet — 一个使 applets 能够使用 Swing 组件的类。JAppletjava.applet.Applet的子类,该类在 Java Applets 教程中有介绍。如果你以前从未编写过常规 applet,我们建议你在继续本节之前阅读该教程。该教程中提供的信息也适用于 Swing applets,但本节会解释一些例外情况。

任何包含 Swing 组件的 applet 必须使用JApplet的子类来实现。这里是一个帮助 Java 走红的 applet 的 Swing 版本 — 一个动画 applet(在其最著名的配置中)展示了我们的吉祥物 Duke 在做空翻:

//https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TumbleItemProject/TumbleItem.jar’, codebase: ‘https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TumbleItemProject’, code:‘components.TumbleItem’, width:‘600’, height:‘95’ }; var parameters = { permissions:‘sandbox’, nimgs:‘17’, offset:‘-57’, img: ‘images/tumble’, maxwidth:‘120’ }; deployJava.runApplet(attributes, parameters, ‘1.7’); //]]>


注意: 如果你看不到 applet 运行,你需要安装至少Java SE Development Kit (JDK) 7版本。


你可以在TumbleItem.java中找到这个 applet 的主要源代码。

本节讨论以下主题:

  • JApplet 提供的功能
  • Applets 中的线程
  • 在 Swing Applet 中使用图像
  • 在 HTML 页面中嵌入 Applet
  • JApplet API
  • Applet 示例

JApplet 提供的功能

因为JApplet是一个顶层的 Swing 容器,每个 Swing applet 都有一个根窗格。根窗格存在的最明显效果是支持添加菜单栏和需要使用内容窗格。

如使用顶层容器中所述,每个顶层容器(如JApplet)都有一个内容窗格。内容窗格使得 Swing applets 与常规 applets 有以下不同之处:

  • 你将组件添加到 Swing applet 的内容窗格,而不是直接添加到 applet。向内容窗格添加组件展示了如何操作。
  • 你在 Swing applet 的内容窗格上设置布局管理器,而不是直接在 applet 上设置。
  • Swing applet 的内容窗格的默认布局管理器是BorderLayout。这与Applet的默认布局管理器FlowLayout不同。
  • 您不应该直接在JApplet对象中放置绘图代码。请参考执行自定义绘图了解如何在小程序中执行自定义绘图的示例。

小程序中的线程

Swing 组件应该在事件分派线程上创建、查询和操作,但浏览器不会从该线程调用小程序的“里程碑”方法。因此,“里程碑”方法——initstartstopdestroy应该使用SwingUtilities方法invokeAndWait(或者如果适用,invokeLater),以便引用 Swing 组件的代码在事件分派线程上执行。有关这些方法和事件分派线程的更多信息,请参考 Swing 中的并发。

这里是一个init方法的示例:

public void init() {
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                createGUI();
            }
        });
    } catch (Exception e) {
        System.err.println("createGUI didn't successfully complete");
    }
}
private void createGUI() {
    JLabel label = new JLabel(
                       "You are successfully running a Swing applet!");
    label.setHorizontalAlignment(JLabel.CENTER);
    label.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.black));
    getContentPane().add(label, BorderLayout.CENTER);
}

invokeLater方法不适用于这个实现,因为它允许init在初始化完成之前返回,这可能会导致难以调试的小程序问题。

TumbleItem中的init方法更复杂,如下面的代码所示。与第一个示例一样,这个init方法的实现使用SwingUtilities.invokeAndWait在事件分派线程上执行 GUI 创建代码。这个init方法设置了一个 Swing 定时器来触发动画更新的动作事件。此外,init使用javax.swing.SwingWorker创建一个后台任务,加载动画图像文件,让小程序立即呈现 GUI,而不必等待所有资源加载完毕。

private void createGUI() {
    ...
    animator = new Animator();
    animator.setOpaque(true);
    animator.setBackground(Color.white);
    setContentPane(animator);
    ...
}
public void init() {
    loadAppletParameters();
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                createGUI();
            }
        });
    } catch (Exception e) { 
        System.err.println("createGUI didn't successfully complete");
    }
    //Set up the timer that will perform the animation.
    timer = new javax.swing.Timer(speed, this);
    timer.setInitialDelay(pause);
    timer.setCoalesce(false);
    timer.start(); //Start the animation.
    //Background task for loading images.
    SwingWorker worker = (new SwingWorker<ImageIcon[], Object>() {
            public ImageIcon[] doInBackground() {
                final ImageIcon[] innerImgs = new ImageIcon[nimgs];
            *...//Load all the images...*
            return imgs;
        }
        public void done() {
            //Remove the "Loading images" label.
            animator.removeAll();
            loopslot = -1;
            try {
                imgs = get();
            } *...//Handle possible exceptions*
        }
    }).execute();
}

您可以在TumbleItem.java中找到小程序的源代码。要找到小程序所需的所有文件,请参阅示例索引。

在 Swing 小程序中使用图像

Applet类提供了getImage方法来将图片加载到小程序中。getImage方法创建并返回一个代表加载图片的Image对象。因为 Swing 组件使用Icon而不是Image来引用图片,所以 Swing 小程序往往不使用getImage。相反,Swing 小程序创建ImageIcon的实例,从图像文件加载图标。ImageIcon具有一个节省代码的好处:它自动处理图像跟踪。更多信息请参考如何使用图标。

Duke 做空翻的动画需要 17 张不同的图片。该小程序使用每张图片一个ImageIcon,并在其init方法中加载这些图片。由于图片加载可能需要很长时间,这些图标是在一个SwingWorker对象实现的单独线程中加载的。以下是代码:

public void init() {
    ...
    imgs = new ImageIcon[nimgs];
    (new SwingWorker<ImageIcon[], Object>() {
        public ImageIcon[] doInBackground() {
            //Images are numbered 1 to nimgs,
            //but fill array from 0 to nimgs-1.
            for (int i = 0; i < nimgs; i++) {
                imgs[i] = loadImage(i+1);
            }
            return imgs;
        }
        ...
    }).execute();
}
...
protected ImageIcon loadImage(int imageNum) {
    String path = dir + "/T" + imageNum + ".gif";
    int MAX_IMAGE_SIZE = 2400;  //Change this to the size of
                                 //your biggest image, in bytes.
    int count = 0;
    BufferedInputStream imgStream = new BufferedInputStream(
       this.getClass().getResourceAsStream(path));
    if (imgStream != null) {
        byte buf[] = new byte[MAX_IMAGE_SIZE];
        try {
            count = imgStream.read(buf);
            imgStream.close();
        } catch (java.io.IOException ioe) {
            System.err.println("Couldn't read stream from file: " + path);
            return null;
        }
        if (count <= 0) {
            System.err.println("Empty file: " + path);
            return null;
        }
        return new ImageIcon(Toolkit.getDefaultToolkit().createImage(buf));
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

loadImage 方法为指定的动画帧加载图像。它使用 getResourceAsStream 方法而不是通常的 getResource 方法来获取图像。生成的代码不太美观,但是对于从 JAR 文件加载图像到使用 Java Plug-in™ 软件执行的小程序来说,getResourceAsStreamgetResource 更有效。有关更多详细信息,请参见将图像加载到小程序中。

在 HTML 页面中嵌入小程序

您可以使用 applet 标签部署一个简单的小程序。或者,您可以使用部署工具包。以下是翻筋斗的杜克小程序的代码:

<script src="https://www.java.com/js/deployJava.js" type="text/javascript">
</script><script type="text/javascript">
//<![CDATA[
    var attributes = { archive: 'https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TumbleItemProject/TumbleItem.jar',
                       codebase: 'https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TumbleItemProject',
                       code:'components.TumbleItem', width:'600', height:'95' };
    var parameters = { permissions:'sandbox', nimgs:'17', offset:'-57',
                       img: 'images/tumble', maxwidth:'120' };
    deployJava.runApplet(attributes, parameters, '1.7');
//]]>
</script><noscript>A browser with Javascript enabled is required for this page to operate properly.</noscript>

有关更多信息,请参见部署小程序中的 Java 小程序课程。

小程序 JApplet API

下表列出了 JApplet 添加到小程序 API 中的有趣方法。它们让您访问根窗格提供的功能。您可能使用的其他方法由 ComponentApplet 类定义。请参见组件方法以获取常用的 Component 方法列表,并参见 Java 小程序以获取有关使用 Applet 方法的帮助。

方法 目的
void setContentPane(Container) Container getContentPane() 设置或获取小程序的内容窗格。内容窗格包含小程序的可见 GUI 组件,应该是不透明的。
void setRootPane(JRootPane) JRootPane getRootPane() 创建、设置或获取小程序的根窗格。根窗格管理小程序的内部,包括内容窗格、玻璃窗格等。
void setJMenuBar(JMenuBar) JMenuBar getJMenuBar() 设置或获取小程序的菜单栏以管理小程序的一组菜单。
void setGlassPane(Component) Component getGlassPane() 设置或获取小程序的玻璃窗格。您可以使用玻璃窗格拦截鼠标事件。
void setLayeredPane(JLayeredPane) JLayeredPane getLayeredPane() 设置或获取 applet 的分层窗格。您可以使用 applet 的分层窗格将组件放在其他组件的前面或后面。

Applet 示例

这个表格展示了 Swing applet 的示例以及这些示例在哪里描述。

示例 描述位置 备注
TumbleItem 本页 一个动画 applet

如何使用按钮、复选框和单选按钮

原文:docs.oracle.com/javase/tutorial/uiswing/components/button.html

要创建一个按钮,你可以实例化从AbstractButton类继承的许多类之一。下表显示了你可能想要使用的 Swing 定义的AbstractButton子类:

摘要 描述位置
JButton 一个常见的按钮。 如何使用通用按钮 API 和 如何使用 JButton 功能
JCheckBox 一个复选框按钮。 如何使用复选框
JRadioButton 一组单选按钮中的一个。 如何使用单选按钮
JMenuItem 菜单中的一个项目。 如何使用菜单
JCheckBoxMenuItem 具有复选框的菜单项。 如何使用菜单 和 如何使用复选框
JRadioButtonMenuItem 具有单选按钮的菜单项。 如何使用菜单 和 如何使用单选按钮
JToggleButton 实现JCheckBoxJRadioButton继承的切换功能。可以实例化或子类化以创建两状态按钮。 在一些示例中使用

注意: 如果你想将一组按钮收集到一行或一列中,那么你应该查看工具栏。


首先,本节解释了AbstractButton定义的基本按钮 API,因此所有 Swing 按钮都具有共同的特性。接下来,它描述了JButton添加到AbstractButton的少量 API。之后,本节将向您展示如何使用专门的 API 来实现复选框和单选按钮。

如何使用通用按钮 API

这里是一个显示三个按钮的应用程序的图片:



试试这个:

  1. 点击“启动”按钮以使用Java™ Web Start运行按钮演示(下载 JDK 7 或更高版本)。或者,要自行编译和运行示例,请参考示例索引。
  2. 点击左侧按钮。
    它禁用了中间按钮(以及自身,因为它不再有用),并启用了右侧按钮。
  3. 点击右侧按钮。
    它启用了中间按钮和左侧按钮,并禁用了自身。

正如ButtonDemo示例所示,Swing 按钮可以同时显示文本和图像。在ButtonDemo中,每个按钮的文本相对于其图像有不同的位置。每个按钮文本中的下划线字母显示了助记符 — 每个按钮的键盘替代键。在大多数外观中,用户可以通过按下 Alt 键和助记符来点击按钮。例如,Alt-M 将点击 ButtonDemo 中的 Middle 按钮。

当按钮被禁用时,外观会自动生成按钮的禁用外观。但是,您可以提供一个图像来替换正常图像。例如,您可以提供左侧和右侧按钮使用的图像的灰色版本。

如何实现事件处理取决于您使用的按钮类型以及如何使用它。通常,您会实现一个 action listener,每当用户点击按钮时都会通知它。对于复选框,通常会使用一个 item listener,当复选框被选中或取消选中时会通知它。

下面是ButtonDemo.java中创建上一个示例中按钮并响应按钮点击的代码。粗体代码是如果按钮没有图像时将保留的代码。

*//In initialization code:*
    ImageIcon leftButtonIcon = createImageIcon("images/right.gif");
    ImageIcon middleButtonIcon = createImageIcon("images/middle.gif");
    ImageIcon rightButtonIcon = createImageIcon("images/left.gif");
    b1 = new JButton("Disable middle button", leftButtonIcon);
    b1.setVerticalTextPosition(AbstractButton.CENTER);
    b1.setHorizontalTextPosition(AbstractButton.LEADING); //aka LEFT, for left-to-right locales
    b1.setMnemonic(KeyEvent.VK_D);
    b1.setActionCommand("disable");
    b2 = new JButton("Middle button", middleButtonIcon);
    b2.setVerticalTextPosition(AbstractButton.BOTTOM);
    b2.setHorizontalTextPosition(AbstractButton.CENTER);
    b2.setMnemonic(KeyEvent.VK_M);
    b3 = new JButton("Enable middle button", rightButtonIcon);
    //Use the default text position of CENTER, TRAILING (RIGHT).
    b3.setMnemonic(KeyEvent.VK_E);
    b3.setActionCommand("enable");
    b3.setEnabled(false);
    //Listen for actions on buttons 1 and 3.
    b1.addActionListener(this);
    b3.addActionListener(this);
    b1.setToolTipText("Click this button to disable "
                      + "the middle button.");
    b2.setToolTipText("This middle button does nothing "
                      + "when you click it.");
    b3.setToolTipText("Click this button to enable the "
                      + "middle button.");
    ...
}
public void actionPerformed(ActionEvent e) {
    if ("disable".equals(e.getActionCommand())) {
        b2.setEnabled(false);
        b1.setEnabled(false);
        b3.setEnabled(true);
    } else {
        b2.setEnabled(true);
        b1.setEnabled(true);
        b3.setEnabled(false);
    }
} 
protected static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = ButtonDemo.class.getResource(path);
    *...//error handling omitted for clarity...*
    return new ImageIcon(imgURL);
}

Java 中文官方教程 2022 版(十五)(2)https://developer.aliyun.com/article/1486398

相关文章
|
20天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
3月前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
51 3
|
7天前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
18 2
|
14天前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
|
17天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
本系列教程笔记详细讲解了Kotlin语法,适合希望深入了解Kotlin的开发者。对于需要快速学习Kotlin的小伙伴,推荐查看“简洁”系列教程。本篇笔记重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android库开发建议以及相互调用时的注意事项。
19 3
|
19天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
20 3
|
19天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
25天前
|
消息中间件 存储 JSON
rabbitmq基础教程(ui,java,springamqp)
本文提供了RabbitMQ的基础教程,包括如何使用UI创建队列和交换机、Java代码操作RabbitMQ、Spring AMQP进行消息发送和接收,以及如何使用不同的交换机类型(fanout、direct、topic)进行消息路由。
19 0
rabbitmq基础教程(ui,java,springamqp)
|
27天前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
181 1
|
18天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(2)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(2)