我正在开发一个显示图像的应用程序,并从数据库中播放声音.我正在尝试决定是否使用单独的JFrame从GUI向数据库添加图像.
我只是想知道使用多个JFrame窗口是否是一个好习惯?
有几次我因为建议使用以下方法而受到批评:
在Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:
对于布局,答案总是相同的:使用合适的LayoutManager
我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:
我正试图将我的表单精确定位在任务栏上方.不幸的是,我的努力受到以下事实的阻碍:this.Height在我的表单上返回的值比实际表单小10个像素(包含所有边框,标题栏等).我正在使用Aero运行Windows 7.当Aero关闭(并且边框更薄)时,所有工作都按预期工作.表格边框样式是FixedSingle.我不想实现特定于Aero的黑客攻击.我该怎么做才能获得正确的身高?
我尝试了setPrefferedSize和setSize方法,但对话框仍以最小尺寸打开.
private void method() {
commandDialog.setPreferredSize(new Dimension(100,100));
- - -
- - - //Components added to dialogPanel
commandDialog.add(dialogPanel);
// Tried this as well: commandDialog.setSize(40, 40);
commandDialog.validate();
commandDialog.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud) 大家好,我最近遇到的问题是,现在有些显示器有不同的DPI设置,有些显示器更密集,例如Apple的Retina显示器.
如何用Java补偿各种监视器上的不同DPI设置和密度?是否可以在任何监视器上将控件缩放为相同的大小.我知道在为Android编程时,所有测量都在"DP"中,您可以为三种不同的显示密度指定不同的图像.
有没有办法可以使用Java/Swing为不同的显示密度选择不同的图像,这样我的应用程序在高密度显示器上看起来并不模糊?或者这不是那么重要或可能吗?我知道Chrome目前没有考虑DPI,但是Internet Explorer和其他应用程序也是如此.
谢谢你的帮助,我是Java开发人员,我以前从未考虑过DPI,并且想知道如何去做它:)
我的问题:JSpinner非常瘦,我只能在最后一个位置看到字符串上的字符.
例如:"你好"我只看到'o'.
我在JFrame的BorderLayout.SOUTH中有一个JPanel
JPanel的布局管理器是默认的 - 如果我被误导,请纠正我 - 一个FlowLayout管理器.
前面提到的JPanel中还有多个组件.
我试过了
RandomSpinner = new JSpinner(tempModel);
int w = RandomSpinner.getWidth(); int h = RandomSpinner.getHeight();
RandomSpinner.setSize(new Dimension(w * 2, h));
add(RandomSpinner);
Run Code Online (Sandbox Code Playgroud)
这对JSpinner的宽度没有影响.
我应该如何更改JSpinner的宽度或者这是一个FlowLayout问题?
谢谢
是否可以为JFrame设置固定宽度?至少以下代码不起作用:
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
public final class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 500);
f.setMinimumSize(new Dimension(500, 0));
f.setMaximumSize(new Dimension(500, Integer.MAX_VALUE));
f.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
最小设置有效,但最大值不是.
我正在开发一个具有自定义外观的应用程序.对于GUI测试,我使用的是FEST-Swing.目前,GUI测试使用默认的Java外观运行.因此,有些测试失败,但是我应该将其视为GUI中的错误,还是使用我的自定义外观进行测试?
稍后编辑:
谢谢Andrew Tompson的快速回答.但我认为这个问题仍然存在,因为流程布局的工作方式.这是一个发生了什么的模型:

标准LAF使用比我使用的字体更大的字体,这导致其中一个按钮退出布局.我不能使用pack(),因为该容器有一个大小要求.如果您没有在该示例中调用frame.pack(),我认为您会遇到同样的问题.
在java编程工作了近4年之后,我决定学习如何自己编写GUI类,因为到目前为止我一直使用NetBeans GUI编辑器(我并不为此感到特别自豪,但它已经很好地避免了我对组件的担心布局).
问题是我正在关注如何使用GroupLayout教程来了解我觉得非常强大的布局管理器.现在我自己做了一个小例子,然后尝试在Netbeans GUI Editor中做同样的事情,我发现两个代码之间存在一些差异,我想知道我是否遗漏了某些内容,或者NetBeans只是在GroupLayout定义中添加了无用的代码.
这是我的目标:

这是我的SSCCE:
public static void main(String[] args) {
JLabel label = new JLabel("This is a test");
label.setFont(new Font("Segoe UI Semibold", Font.BOLD | Font.ITALIC, 24));
JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
DefaultListModel model = new DefaultListModel();
model.addElement("Apple");
model.addElement("Orange");
model.addElement("Kiwi");
model.addElement("Watermelon");
JList list = new JList(model);
list.setPreferredSize(new Dimension(400, 300));
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(list);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container contentPane = frame.getContentPane();
GroupLayout layout = new GroupLayout(contentPane);
layout.setAutoCreateContainerGaps(true);
contentPane.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING) …Run Code Online (Sandbox Code Playgroud) 你好,我有一个奇怪的问题.
我想知道是否以及如何为我的Jlabels,TextAreas和基本上任何可以放在面板上的文本进行通用设置.我一直在每个标签上写字体大小以使其保持一致.然而,面板正在增长,我不想在每个标签上硬编码字体大小.
以下是我正在使用并希望在我的所有标签上使用的尺寸,以及textarea的尺寸.
titlelb.getFont().deriveFont( Font.BOLD, (float) 20.);
lb1.getFont().deriveFont( Font.PLAIN, (float) 11.);
lb2.getFont().deriveFont( Font.BOLD, (float) 11.);
textArea.setFont( Font.decode( "Arial-PLAIN-11"));
Run Code Online (Sandbox Code Playgroud)
我只是想知道有没有办法将它设置为普遍的,每个Panel都会继承这些特定的尺寸,如果可能的话,我真的不知道如何去做标签的尺寸,这就是为什么我在这里问.先感谢您.