学习GridBagLayout,这里的问题是,名称标签和combox没有显示在面板的顶部,但我已将其锚点设置为NORTH.为什么?
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class Test2 {
public Test2() {
JFrame frame = new JFrame();
frame.setTitle("test");
frame.getContentPane().setLayout(new GridLayout(1,2));
frame.setSize(800, 600);
JPanel panel1 = new JPanel();
panel1.setLayout(new GridBagLayout());
JLabel label = new JLabel("name");
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.anchor = GridBagConstraints.NORTH;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
panel1.add(label, gridBagConstraints);
String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
JComboBox petList …Run Code Online (Sandbox Code Playgroud) 我花了一些时间在这里阅读和试验,并提出了一些方法,但还没有完成任何工作,所以我想知道更多有经验的Swing程序员会做什么.
我的应用程序的主窗口包含JPanel的自定义子类型,用于显示从数学函数计算的图像.这可能需要一些时间来计算,所以当发生这种情况时,我会在面板中间显示一条文本消息和一个进度条.我希望文本和进度条在调整面板大小时适当调整大小,可能使用面板宽度的恒定分数.
目前我有另一个包含文本和进度条的JPanel子类型,我将这个"进度面板"添加到主面板,并将其设置为在需要时可见.主面板不包含任何其他组件,但有自己的paintComponent()方法来显示从另一个类获取的BufferedImage.这有一些问题,因为它代表:
那你会怎么做?
如何调整文本大小.我是否需要在调整面板大小时显式创建新的字体,或者是否有任何方法可以更自动地执行此操作? -
我有两个JButton文本"Ok"和"Cancel".我用它GridBagLayout来对齐它们JDialog.我把锚设置为GridBagConstraints.CENTER.由于文本"Ok"和"Cancel"中字符数的不同,按钮的大小不同.如何正确对齐它们,使它们每个都具有相同的大小.我试过以下但没有用.
okayButton.setSize(cancelButton.getSize());
Run Code Online (Sandbox Code Playgroud) 我是 Java Swing 的新手。我正在尝试制作一个包含三个按钮的框架;一个在中间,另一个在顶部,最后一个在右侧。我想让 NORTH 和 EAST 边界的宽度相同。但是现在,EAST 边界比 NORTH 边界宽。
我想知道是否有一种方法可以在 BorderLayout 中更改 WEST/EAST 边框的宽度或 NORTH/SOUTH 边框的高度。
我把一些JPanel放到另一个JPanel中,它的布局是Box Layout和Y-Axis.在我放置所有面板后,我需要从JPanel容器面板中获取每个添加的JPanel的Y位置.但是,当我试图得到它时,每个JPanel的Y位置总是为零.请告诉我如何从JPanel容器JPanel获取每个Jpanel的Y位置.
这就是我所做的,
JPanel panelHolder = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
for(int i = 0; i< 10; i++){
JPanel p = new JPanel();
panelHolder.add(p);
}
int componentCount = panelHolder.getComponentCount();
for (int j = 0; i < componentCount ; j++) {
Component c = pnlRowHolder.getComponent(i);
JPanel p = (JPanel)c;
System.out.println(p.getY());//I get zero for all
}
Run Code Online (Sandbox Code Playgroud) 我用Java创建了一个简单的菜单,但我无法弄清楚如何更改按钮的大小.我的菜单看起来像这样:

我希望最后一个按钮与其他按钮一样大小.
tlacTisk.setSize(10,10);
tlacTisk.setPreferredSize(10,10);
Run Code Online (Sandbox Code Playgroud)
不起作用.
代码,我创建按钮和框:
JButton tlacSVG = new JButton();
tlacSVG.setText("Export do SVG");
tlacSVG.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
exportujSVG();
}
});
JButton tlacPNG = new JButton();
tlacPNG.setText("Export do PNG");
tlacPNG.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
exportujPNG();
}
});
JButton tlacTisk = new JButton();
tlacTisk.setText("Tisk...");
tlacTisk.setPreferredSize(new Dimension(50, 25));
tlacTisk.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
tiskni();
}
});
Box boxTlacitek = Box.createVerticalBox();
boxTlacitek.add(Box.createVerticalStrut(5));
boxTlacitek.add(tlacSVG);
boxTlacitek.add(Box.createVerticalStrut(10));
boxTlacitek.add(tlacPNG);
boxTlacitek.add(Box.createVerticalStrut(10));
boxTlacitek.add(tlacTisk);
boxTlacitek.setBorder(BorderFactory.createTitledBorder("Menu"));
okno.add(boxTlacitek, BorderLayout.EAST); …Run Code Online (Sandbox Code Playgroud) 如何在不使用ComponentListener或其他监听器的情况下将GlassPaane中的JLabel粘贴到JProgressBar的相对浮动坐标,
是否有标准布局管理器中的built_in通知程序可以通知其内部状态,并且可以访问覆盖,而不是我尝试使用ComponentListener和NullLayout

.

SSCCE关于ComponentListener和与NullLayout
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
//http://stackoverflow.com/questions/14560680/jprogressbar-low-values-will-not-be-displayed
public class ProgressSample {
private JFrame frame = new JFrame("GlassPane instead of JLayer");
private JLabel label;
private GridBagConstraints gbc = new GridBagConstraints();
private JProgressBar progressSeven;
public ProgressSample() {
frame.setLayout(new FlowLayout());
frame.add(new JButton("test"));
frame.add(new JCheckBox("test"));
frame.add(new JRadioButton("test"));
// Nothing is displayed if value is lover that 6 …Run Code Online (Sandbox Code Playgroud) 我正在尝试绘制图形,JButton单击时应显示图形。为了创建数据集,我正在获取一些值JTextField,然后创建一个图表并绘制它。我有两个问题:
这是我的程序:
public class Test extends JFrame {
private JPanel contentPane;
private JTextField textField;
private ChartPanel chartPanel;
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.WEST);
panel.setLayout(new MigLayout("", "[][grow]", "[][][][][]"));
JLabel lblA = new JLabel("a");
panel.add(lblA, "cell 0 2,alignx trailing");
textField = new JTextField();
panel.add(textField, "cell 1 2,growx");
textField.setColumns(10);
JButton btn = new JButton("Plot");
btn.addActionListener(new …Run Code Online (Sandbox Code Playgroud) 我有一个案例,我将JPanels添加到FlowLayout,他们没有将自己与布局的底部对齐.我正在使用它layout.setAlignOnBaseline(true),它正确地将JLabel对齐到面板的底部.但是,一旦这些标签被包裹在面板中,它就不再起作用了.这是我的意思的一个例子,顶部和底部有两个面板.
import javax.swing.*;
import java.awt.*;
public class BadLayout {
private static final Font font1 = new Font("Arial", Font.BOLD, 14);
private static final Font font2 = new Font("Arial", Font.BOLD, 30);
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Bad layout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout layout = new FlowLayout(FlowLayout.LEADING, 0, 0);
layout.setAlignOnBaseline(true);
JPanel topPanel = new JPanel();
topPanel.setLayout(layout);
topPanel.setBackground(Color.BLACK);
for (int i = 0; i < 10; i++) {
JLabel label = new JLabel("Foo");
label.setForeground(Color.WHITE);
label.setBackground(Color.RED);
label.setOpaque(true); …Run Code Online (Sandbox Code Playgroud) I am adding components in JPanel which is set as FlowLayout, they are not moving on next line even there is no space in left in that line.
Here is the screenshot of the problem

import javax.swing.*;
import java.awt.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
public class GUI extends JFrame
{
private JLabel jlfname;
private JPanel p1;
private JTextField t1;
private JLabel jllname;
private JTextField t2;
private JLabel jltitle;
private JTextField t3;
GUI()
{
jlfname=new JLabel("First Name : ");
p1=new JPanel(); …Run Code Online (Sandbox Code Playgroud) java ×10
layout-manager ×10
swing ×10
flowlayout ×2
jbutton ×2
jpanel ×2
awt ×1
font-size ×1
glasspane ×1
jfreechart ×1
layout ×1
miglayout ×1