Tag: awt

需要一种缩放字体以适合矩形的方法

我刚刚编写了一些代码来缩放字体以适应矩形(长度)。 它从18宽度开始并向下迭代直到它适合。 这似乎非常低效,但我找不到一种非循环方式来做到这一点。 此行适用于可缩放的游戏网格中的标签,因此我无法看到解决方案(包裹,切断和延伸超过矩形都是不可接受的)。 它实际上非常快,我正在为数百个矩形做这个,而且速度足以让它减慢触摸速度。 如果没有人提出更好的东西,我只会从表中加载起始猜测(因此它比18更接近)并使用它 – 除了延迟效果很好。 public Font scaleFont(String text, Rectangle rect, Graphics g, Font pFont) { float nextTry=18.0f; Font font=pFont; while(x > 4) { font=g.getFont().deriveFont(nextTry); FontMetrics fm=g.getFontMetrics(font); int width=fm.stringWidth(text); if(width <= rect.width) return font; nextTry*=.9; } return font; }

将字体添加到Swing应用程序并包含在包中

我需要在Java Swing应用程序中使用自定义字体(ttf)。 如何将它们添加到我的包中并使用它们? 同时,我只是在Windows中安装它们然后我使用它们,但我不希望应用程序的使用会如此复杂,在使用我的应用程序之前告诉用户安装字体并不是很方便。

如果不推荐使用Swing,那么替代方案是什么?

我听说显然Swing正在开发中。 我喜欢Swing并且一直使用它。 我现在应该使用什么呢?

组合guava eventbus和AWT Event线程处理的最佳方法

当你有一个异步事件总线和fire事件时,让我们说在UI中捕获的模型中你可能有以下问题: 已注册的处理程序在工作线程中执行,但所有UI swing更改都需要在AWT事件线程中执行。 这意味着您需要在EventQueue.invokeLater(…)包含所有处理程序clode。 这看起来像很多锅炉板代码。 我想知道是否有更智能的解决方案来解决这个问题。 guava事件总线的扩展如何标记在特殊线程中执行的处理程序? 这可以用annotion标记,例如@ExecuteWithinEDT : class EventBusChangeRecorder { @Subscribe @ExecuteWithinEDT void recordCustomerChange(ChangeEvent e) { recordChange(e.getChange()); } }

jTable右键单击弹出菜单

我有一个SQL数据库,我正在开发一个允许我添加/删除/修改记录的程序。 我已经设法添加我正在编辑/删除它们的记录。 我想在表中显示现有记录,所以我使用jTable。 我在网上发现了一些代码并对其进行了修改以提取记录并将其显示在jtable中,但我不知道如何编写右键并显示弹出菜单。 在该弹出菜单中,我想显示删除记录和修改记录等选项。 这是我使用的代码,使jTable和显示数据: private void menuDeleteAuthorActionPerformed(java.awt.event.ActionEvent evt) { TableFromDatabase deleteAuthor = new TableFromDatabase(); deleteAuthor.pack(); deleteAuthor.setVisible(true); Vector columnNames = new Vector(); Vector data = new Vector(); try { Connection connection = DriverManager.getConnection( url, user, password ); // Read data from a table String sql = “SELECT * FROM Authors”; Statement stmt = connection.createStatement(); […]

Java中是否存在用于fieldset(HTML)的等价物?

Java中的元素(即Swing / AWT或SWT)是否等同于HTML元素fieldset ?

绘制矩形边框粗细

是否可以轻松地绘制具有给定边框粗细的矩形?

三重缓冲区重闪烁

不应该将三重缓冲和Canvas作为被动渲染的最佳解决方案吗? 我刚刚编写了这个显示圆圈的java代码。 如果我将bufferstrategy留给3,它就会闪烁太多。 如果我把它调低到2或1就可以了。 也许我做错了什么? public void run(){ while (running){ update(); draw(); } } public void update(){ } public void draw(){ BufferStrategy bs = getBufferStrategy(); if (bs==null){ createBufferStrategy(3); return; } Graphics g = bs.getDrawGraphics(); g.setColor(Color.BLACK); g.fillOval(30, 30, 20, 20); g.dispose(); bs.show(); } 这是我放置Canvas的JFrame类 public class Game { public static void main (String [] args){ Pan […]

如何淡出一个图像并淡入另一个图像(Java)?

我希望这样做,以便当一个图像淡出时,另一个图像渐渐消失。我有两个BufferedImages ,我正在使用AWT。 编辑: package com.cgp.buildtown; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Font; import java.awt.FontFormatException; import java.awt.Graphics; import java.awt.GraphicsEnvironment; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; public class Intro extends JPanel implements Runnable, MouseListener, MouseMotionListener { private static final long serialVersionUID = […]

Java中的屏幕捕获无法捕获整个屏幕

我有一小段代码用于跟踪时间 – 很简单,它每隔四分钟拍摄一次我的桌面照片,以便稍后我可以回过头来看看我白天做的事情 – 它很棒,除非我连接到外部显示器 – 这个代码只拍摄我的笔记本电脑屏幕的屏幕截图,而不是我正在使用的更大的外部显示器 – 任何想法如何更改代码? 我正在运行OSX,以防相关…… import java.awt.AWTException; import java.awt.Robot; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; class ScreenCapture { public static void main(String args[]) throws AWTException, IOException { // capture the whole screen int i=1000; while(true){ i++; BufferedImage screencapture = new Robot().createScreenCapture( new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) ); // Save […]