所以我正在编写一个使用GUI的程序。GUI是由Java中的JFrame和JPanel构建的。我有一个JTextArea()和一个JButton(),出现在左侧的JTextArea旁边。我还有一个使用下面的方法调用在本地导入的图像(“f”是我的JFrame的变量名):
f.setIconImage(ImageIO.read(new File("image.png")));
我不介意允许用户调整JFrame的大小,但我不喜欢的是,JFrame会自动重新格式化我的JFrame上的组件-特别是我的图像和JTextArea()之间的距离。如果可能的话,我希望保持我的图像和JTextArea之间的距离相同,而不管用户将JFrame调整到什么大小。如果有帮助,下面是我的代码的其余部分:
public class GUI {
private JFrame f;
private JPanel p;
private JButton b1;
private JLabel lab;
private JTextArea tf;
private static final String FileName = "schedule.txt";
private static final String FileName2 = "schedule2.txt";
public void show()
{
f = new JFrame("Scheduler");
f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p = new JPanel();
//p.setPreferredSize(new Dimension(200, 400));
b1 = new JButton("Run");
p.add(b1);
f.add(p);
f.add(p, BorderLayout.SOUTH);
f.add(new JLabel(new ImageIcon("image.png")));
try {
f.setIconImage(ImageIO.read(new File("image.png")));
} catch(Exception z){
System.out.println("Trouble reading file");
}
tf = new JTextArea();
tf.setPreferredSize(new Dimension(300, 200));
p.add(tf);
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = tf.getText();
try {
FileWriter fw = new FileWriter(FileName);
fw.write(text);
fw.close();
parseInfo();
}
catch(Exception ex)
{
}
}
});
f.setVisible(true);
}
您可以通过多种方式“可能”实现这一目标,但基本答案是,您需要选择一个或多个更符合您需求的布局管理器。
例如,使用GridBagLayout
,您可以执行类似...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.LineBorder;
public class JavaApplication1 {
public static void main(String[] args) {
new JavaApplication1();
}
public JavaApplication1() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(8, 8, 8, 8);
JLabel label = new JLabel("Image placeholder") {
// This is done only for demonstration purposes
@Override
public Dimension getPreferredSize() {
return new Dimension(128, 128);
}
};
label.setBorder(new LineBorder(Color.DARK_GRAY));
add(label, gbc);
gbc.gridy++;
gbc.fill = GridBagConstraints.BOTH;
// This will cause the text area to occupy all the avalilable free space
//gbc.weightx = 1;
//gbc.weighty = 1;
JTextArea ta = new JTextArea(10, 20);
add(new JScrollPane(ta), gbc);
JButton btn = new JButton("Run");
gbc.gridy++;
// Reset the constraints
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 0;
gbc.weighty = 0;
add(btn, gbc);
}
}
}
查看容器中的组件布局,了解更多详细信息和想法
您的代码中有一些东西是“关闭”的,但这...
tf = new JTextArea();
tf.setPreferredSize(new Dimension(300, 200));
p.add(tf);
可能是最引人注目的。
一般来说,< code>JTextArea将受益于包装在< code>JScrollPane中。此外,由于文本在多个平台上呈现的方式不一致,您应该避免使用< code>setPreferredSize(实际上,您应该避免在一般情况下使用它),而是依赖于< code>rows,columns构造函数,该函数将根据当前的字体和图形属性进行计算。
例如,当我写 它将被格式化为 我如何让它保持两个空格? 编辑: 这与如何在Visual Studio Code中更改缩进是不同的问题?
问题内容: 我想展示如何使用进行合并排序。我想做的是在一段时间后使可见。我尝试了很多方法,但是所有这些都同时出现,没有中间延迟。 但是,当我单击按钮时,所有标签都出现在相同的momenet上,尽管我一直保持延迟。 问题答案: 有很多原因导致此方法无法正常工作。首先,这种方式行不通。它在后台等待,直到给定的延迟过去,然后调用注册的s 方法。 其次,如果它确实以这种方式工作,它将阻止事件调度线程,从而
自动格式化 控制台允许您自动格式化复杂的请求。为此,请将光标置于您想格式化的请求上,并从操作菜单中选择自动缩进: 图 6. 自动缩进一个请求 控制台将调整请求的 JSON 体,调整之后的请求如下所示: 图 7. 格式化的请求 如果在已完全格式化的请求上选择自动缩进,控制台将把每个文档的请求体折叠到一行,这在使用 Elasticsearch 的批量 API 的时候会非常方便。 图 8. 每个文档一行
问题内容: 为什么内联阻止列表项中有空格?无论我如何将列表项放入菜单,我总会得到空格。 问题答案: 我已经看到并回答了: 经过进一步的研究,我发现这是一种依赖空白的方法,并且依赖于字体设置。在这种情况下,将渲染4px。 为了避免这种情况,您可以将所有s放在一行中一起运行 ,或者像这样阻塞end标记和begin标记: 如其他答案和评论所述,解决此问题的最佳实践是将其添加到父元素中: 这对于HTML的
问题内容: 我正在尝试创建一个表格,其中每个单元格具有背景颜色,并且它们之间具有空白。但我似乎在执行此操作时遇到了麻烦。 我尝试设置边距,但似乎没有效果。 如果我对填充执行相同的操作,则可以,但是在单元格之间没有间距。 有人可以帮我吗? 问题答案: 使用元素上的属性设置单元格之间的间距。 确保设置为(否则每个单元格之间将有一个单独的边框,而不是每个单元格之间可能会有间隔的单独边框)。
原始关闭原因未解决 如何格式化它,使输出的表是内联的并且空格相等?