我有一个JPanel
带有彩绘背景图像和一个布局管理器,其中包含其他较小的图像,所有这些都在一个内部JFrame
.背景图像非常大,我希望能够保持其纵横比,无论是在大型还是小型显示器上.
最终,我希望能够将我LayoutManager
和它的细胞中的较小图像"粘合"到背景图片上.
我四处寻找资源,似乎很多例子都使用了,BufferedImage
但我不是; 这会造成问题吗?我将在下面发布我的代码来绘制图像,如果我缺少任何信息,请告诉我.
public class MonitorPanel extends JPanel {
Image img;
public MonitorPanel() throws MalformedURLException {
//add components
try {
img = ImageIO.read(new File("src/customer_vlans.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void paintComponent(Graphics g)
{
//paint background image
super.paintComponent(g);
//g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
g.drawImage(img, 0, 0, this);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我应该提到我知道宽高比公式: 原始高度/原始宽度x新宽度=新高度 然而,我不知道如何正确使用它对我有利.
好的,我是linux和命令行的新手,对java来说还是新手.我有一个实习建立一个java程序.我终于在我的机器(Windows)上完成了它,现在我必须将它迁移到linux机器进行测试,然后让它作为可执行文件运行.我已经做了很多关于linux和阅读类路径的阅读和研究,但仍然很难完全理解.它只是没有点击我.任何人都可以使用示例以简化的方式解释类路径的目的吗?对我来说最令人困惑的一个方面实际上是定义jar的物理路径.我是从usr开始的,还是只需要从jvm文件夹开始?如果重要,我的java程序不在jvm文件夹中.任何人都可以为我解释一下吗?
编辑:非常感谢你们的帮助,我不能说我完全清楚但我对情况的理解要好得多.
我正在使用Eclipse构建一个程序,当我去运行它时,它说"存在错误",无论如何我运行它,控制台中没有错误显示,应用程序运行一个空白屏幕.为什么是这样?
附加信息:我最近一直在尝试将我之前的布局从非常粗糙的形式更改为使用GridBagLayout,但是我对使用布局不是很熟悉.我强烈怀疑问题在于,或者围绕我的布局,因为程序在我尝试进行更改之前正常运行.
这是我的两个涉及布局的主要类,抱歉它很乱,我注释了很多行,以前的布局,以防我必须恢复它:
import java.awt.*;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.plaf.ColorUIResource;
import java.sql.*;
public class MainDisplay extends JFrame {
static Toolkit tk = Toolkit.getDefaultToolkit();
static int Width = (int)tk.getScreenSize().getWidth();
static int Height = (int)tk.getScreenSize().getHeight();
//public static JFrame frame = new JFrame();
public static JPanel pane = new JPanel();
private static String targetIpHolder;
private static String attackerIpHolder;
private static int threatLevelHolder;
private static …
Run Code Online (Sandbox Code Playgroud) 我正在阅读 /bin/sh 和 /bin/bash 之间的差异,并遇到了这个有趣的问题/答案:here
我对在我的标题中提出同样问题的答案发表了评论,他回复了更新的答案:
如何找出系统上 /bin/sh 指向的内容?
复杂的是 /bin/sh 可能是符号链接或硬链接。如果它是符号链接,则解决它的可移植方法是:
> % file -h /bin/sh
> /bin/sh: symbolic link to bash
Run Code Online (Sandbox Code Playgroud)
如果是硬链接,请尝试
> % find -L /bin -samefile /bin/sh
> /bin/sh
> /bin/bash
Run Code Online (Sandbox Code Playgroud)
我尝试了这个,但遇到了麻烦,所以我想我应该提出一个单独的问题。
我从链接答案得到的结果:
>file -h /bin/sh
>/bin/sh: executable (RISC System/6000) or object module
>find -L /bin -samefile /bin/sh
>find: bad option -samefile
Run Code Online (Sandbox Code Playgroud)
我缺少什么?我正在运行 AIX:
>oslevel -s
7100-03-03-1415
Run Code Online (Sandbox Code Playgroud) 我被指派在linux机器上设计一个java程序:
现在,我需要每隔几分钟运行一次; 所以我的合作伙伴所做的是创建一个脚本,使用循环来运行程序,睡几分钟,然后重复.
最近,我的老板告诉我们它的好,但希望整个程序完全自包含在java中; 意味着它在java中循环和休眠.最重要的是,他希望每次运行程序时都可以通过命令行确定睡眠持续时间.
我做了一些研究,似乎在某些情况下使用Thread.sleep()是低效的,我无法判断这是否是其中之一.另外,我还不清楚如何在运行程序时通过命令行确定睡眠时间.如有必要,我可以提供代码.
我知道关于这个问题已经发布了很多问题和答案,但我相信我的情况有点扭曲.我在JFrame中有一个JPanel; Jpanel具有网络地图的彩绘图像背景.我使用MigLayout创建了一个布局.在这个布局的单元格内部,我想显示从网址获取的图像.扭曲是在我的项目中进一步向下,我希望能够每5秒左右刷新一次该图像.
话虽这么说,我是否应该采用一种特殊的方式来添加我的图像,以便以后在每5秒刷新一次这些图像的项目中让自己变得容易?
如果我缺少任何必要的额外信息,请告诉我.
我也有类似的问题,比如这个,但对我来说我有25+私人Jlabel之下,我给了,当我宣布它的值.我在构造函数中使用GridBagLayout将这些JLabel添加到JPanel.如果我按照链接中给出的答案行使用某些内容,则只会更改构造函数中添加的JLabel.
所以在我看来,如果我想改变我的私有JLabel的字体大小,我将不得不单独定义它们的字体大小,或者更改构造函数中的默认值,然后添加我的JLabel.但是,我确信必须有另一种更简单的方法,但我只是没有经验或理解来解决它,或者从其他类似问题的答案中做出适当的调整.
我不认为这确实需要我展示我的代码,但如果它有帮助我可以这样做.
public class LaborRecordPanel implements
Printable, ActionListener {
private Color shade = new Color(201,201,201);
private ImageIcon logoIcon = new ImageIcon("Images/fici_logo1.jpg");
private JLabel logoLabel = new JLabel(logoIcon);
private JLabel authorizedBy = new JLabel("AUTHORIZED BY:");
private JLabel toCertify = new JLabel("THIS IS TO CERTIFY THAT THE ABOVE LABOR HAS BEEN PERFORMED.");
private JLabel laborRecordNO = new JLabel("NO.");
private JLabel nameOfJob = new JLabel("NAME OF JOB:");
private JLabel customerPO = new JLabel("CUSTOMER PO #:");
private JLabel contractNO …
Run Code Online (Sandbox Code Playgroud) 我正在改变如何将我的地图图像从Google maps api获取到使用OpenStreetMap Data的MapQuest托管的地图图块.我正在切换谷歌地图,因为我达到了我没想到的每日请求限制,我没有使用OpenStreet api,因为虽然他们的数据是免费的,但他们的图块有一个限制,我只需要一个图像.因此,我在这里使用MapQuest托管的地图图块.
我想我理解它,但有些事情我希望能够做但却找不到任何文件.例如,如果可能的话,我想要一个500x300的图像尺寸,或者至少512*512(这是瓷砖出来的双256*256).我还希望能够显示标记.这可能吗?
我使用此处的代码将我的纬度和经度数据转换为x和y坐标:
public class slippy {
public static void main(String[] args) {
int zoom = 9;
double lat = 42.8549;
double lon = -78.863;
System.out.println("http://otile1.mqcdn.com/tiles/1.0.0/map/" + getTileNumber(lat, lon, zoom) + ".png");
}
public static String getTileNumber(final double lat, final double lon, final int zoom) {
int xtile = (int)Math.floor( (lon + 180) / 360 * (1<<zoom) ) ;
int ytile = (int)Math.floor( (1 - Math.log(Math.tan(Math.toRadians(lat)) + 1 / Math.cos(Math.toRadians(lat))) / Math.PI) / 2 …
Run Code Online (Sandbox Code Playgroud) 我无法理解为什么我的for循环没有按照我的意愿行事.我的循环的目的是将多个文本字段添加到GUI,准确地说是70.7横穿,10横.它添加了很好的字段,但是停止了比我想要的更短的一行和一列.这似乎足以确定问题的信息,但我不能,所以我来到这里.
for(int i = 0; i < 6; i++){
for(int j = 0; j < 9; j++){
OT2Field[i][j] = new JTextField();
OT1Field[i][j] = new JTextField();
STField[i][j] = new JTextField();
}
}
int xPointer = 3;
int yPointer = 7;
for(int i = 0; i < 6; i++){
for(int j = 0; j < 9; j++){
addTimeFieldBorder0010(option3, OT2Field[i][j], gridbag, gbc, xPointer, yPointer, 1, 1, 0);
yPointer = yPointer + 3;
}
xPointer++;
yPointer = 7;
}
}
private void addTimeFieldBorder0010(JComponent container, …
Run Code Online (Sandbox Code Playgroud)