我正在写一些Java代码,允许用户看到一个带有JLabel,JTextField和JButton的框架。
我希望这个JLabel被称为"Count“,但我对FlowLayout有一个问题。我希望界面看起来像这样:

相反,我有这样的想法:

这是我的代码:
package modul1_Interfate_Grafice;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Exercitiu04 implements ActionListener {
private JFrame frame;
private JLabel labelCount;
private JTextField tfCount;
private JButton buttonCount;
private int count = 0;
public void go() {
frame = new JFrame("Java Counter");
labelCount = new JLabel("Counter");
labelCount.setLayout(new FlowLayout());
frame.getContentPane().add(BorderLayout.CENTER, labelCount);
tfCount = new JTextField(count + " ", 10);
tfCount.setEditable(false);
labelCount.add(tfCount);
buttonCount = new JButton("Count");
labelCount.add(buttonCount);
buttonCount.addActionListener(this);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(350, 150);
frame.setLocation(400, 200);
}
@Override
public void actionPerformed(ActionEvent event) {
count++;
tfCount.setText(count + "");
}
public static void main(String[] args) {
Exercitiu04 a = new Exercitiu04();
a.go();
}
}发布于 2016-08-01 00:03:52
解决它。
而不是labelCount.setLayout(new FlowLayout());`我应该有
frame.setLayout(new FlowLayout());发布于 2016-08-01 23:14:32
通过对JLabel类的描述,
JLabel是:
短文本字符串和/或图像的显示区域。
但是这里是:labelCount.add(tfCount),这里是labelCount.add(buttonCount),您试图将一个文本字段和一个按钮放入标签中。在这种情况下,按钮和文本字段的位置由FlowLayout控制,但标签中的文本位置不受控制。
相反,您应该将所有元素放在公共JPanel中,如下所示:
...
frame = new JFrame("Java Counter");
frame.setLayout(new BorderLayout());
JPanel wrapper = new JPanel(); // JPanel has FlowLayout by default
labelCount = new JLabel("Counter");
labelCount.setLayout(new FlowLayout());
wrapper.add(labelCount);
tfCount = new JTextField(count + " ", 10);
tfCount.setEditable(false);
wrapper.add(tfCount);
buttonCount = new JButton("Count");
buttonCount.addActionListener(this);
wrapper.add(buttonCount);
frame.add(BorderLayout.CENTER, wrapper);
...而且,就像MasterBlaster说的,你应该把swing方法放在EDT中。
发布于 2016-08-26 07:33:33
关于FlowLayout,您只需要知道两件事
a)它是JPanel组件的默认布局管理器b)它没有任何用处。
这种琐碎的布局不能用FlowLayout实现。在Swing中进行布局时,您应该熟悉一些功能强大的布局管理器。我推荐MigLayout和GroupLayout。
package com.zetcode;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
/*
Simple UI with a MigLayout manager.
Author Jan Bodnar
Website zetcode.com
*/
public class MigLayoutCounterEx extends JFrame {
public MigLayoutCounterEx() {
initUI();
}
private void initUI() {
JLabel lbl = new JLabel("Counter");
JTextField field = new JTextField(10);
JButton btn = new JButton("Count");
createLayout(lbl, field, btn);
setTitle("Java Counter");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
setLayout(new MigLayout());
add(arg[0]);
add(arg[1]);
add(arg[2]);
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MigLayoutCounterEx ex = new MigLayoutCounterEx();
ex.setVisible(true);
});
}
}这个例子很简单。您只需将这三个组件放入单元格。
截图:

https://stackoverflow.com/questions/38685662
复制相似问题